最近在寫乙個小工具的時候,在某個指令碼中需要為不同物件,輸出單獨的屬於該物件的日誌檔案,方便檢視。通常在寫 python 指令碼的時候,習慣使用 logging 模組來輸出日誌,簡單,方便。
#!/usr/bin/env python
# coding: utf-8
__author__ = "glon ho"
import logging
log_file = '/tmp/logging_test.log'
logging.basicconfig(level=logging.info,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%y-%m-%d %h:%m:%s',
filename=log_file,
filemode='a')
msg = 'hi, this is glon.'
logging.info('>>> test log msg: %s', msg)
---out:
[root@localhost]$ cat /tmp/logging_test.log
2017-03-03 17:53:08 info >>> test log msg: hi, this is glon.
但在這個需求中,如果使用 logging 模組通過複雜配置來實現的話,未免顯得麻煩。
但是在查閱 logging 模組文件的時候,發現有乙個 logger 的物件。寫日誌是針對物件來寫的,如果有多個物件,那麼應該就可以實現。
#!/usr/bin/env python
# coding: utf-8
__author__ = "glon ho"
import logging
def get_logger(logger_name, log_file, level=logging.info):
l = logging.getlogger(logger_name)
formatter = logging.formatter('%(asctime)s : %(message)s', "%y-%m-%d %h:%m:%s")
filehandler = logging.filehandler(log_file, mode='a')
filehandler.setformatter(formatter)
l.setlevel(level)
l.addhandler(filehandler)
return logging.getlogger(logger_name)
if __name__ == '__main__':
log_file1='/tmp/logger_test1.log'
log_file2='/tmp/logger_test2.log'
logger1 = get_logger('glon', log_file1)
logger2 = get_logger('glonho', log_file2)
logger1.info('>>> test1 log msg: %s', "111111111111111111111")
logger2.info('>>> test2 log msg: %s', "222222222222222222222")
---out:
[root@localhost]$ ls /tmp/logger_test*
/tmp/logger_test1.log /tmp/logger_test2.log
[root@localhost]$
[root@localhost]$ cat /tmp/logger_test1.log
2017-03-03 17:57:20 : >>> test1 log msg: 111111111111111111111
[root@localhost]$
[root@localhost]$ cat /tmp/logger_test2.log
2017-03-03 17:57:20 : >>> test2 log msg: 222222222222222222222
在通過 get_logger 來得到日誌物件的時候,給定的物件名稱不能相同,否則產生的是同乙個日誌物件。
如上面變成這樣
logger1 = get_logger('glon', log_file1)
logger2 = get_logger('glon', log_file2)
logger1.info('>>> test1 log msg: %s', "111111111111111111111")
logger2.info('>>> test2 log msg: %s', "222222222222222222222")
執行程式時不會出錯,但輸出:
---
out:
[root@localhost]$ ls /tmp/logger_test*
/tmp/logger_test1.log /tmp/logger_test2.log
[root@localhost]$
[root@localhost]$ cat /tmp/logger_test1.log
2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111
2017-03-03 17:59:41 : >>> test2 log msg: 22222222222222222222
[root@localhost]$
[root@localhost]$ cat /tmp/logger_test2.log
2017-03-03 17:59:41 : >>> test1 log msg: 111111111111111111111
2017-03-03 17:59:41 : >>> test2 log msg: 222222222222222222222
logging:
中文譯本:
loggers:
使用 logger 在指令碼中輸出多個日誌
最近在寫乙個小工具的時候,在某個指令碼中需要為不同物件,輸出單獨的屬於該物件的日誌檔案,方便檢視。通常在寫 python 指令碼的時候,習慣使用 logging 模組來輸出日誌,簡單,方便。usr bin env python coding utf 8 author glon ho import l...
使用 logger 在指令碼中輸出多個日誌
最近在寫乙個小工具的時候,在某個指令碼中需要為不同物件,輸出單獨的屬於該物件的日誌檔案,方便檢視。通常在寫 python 指令碼的時候,習慣使用 logging 模組來輸出日誌,簡單,方便。usr bin env python coding utf 8 author glon ho import l...
Logger 日誌輸出請使用佔位符
在工作覆盤時,檢查 的過程中,發現好多 在列印日誌的時候,會用字串拼接,這是是非常不好的現象。對於佔位符的形式而言,只有在我們需要的時候才會提取字串,這樣就會避免建立string物件的時候消耗大量的資源。因為string物件是不可變的,所以會消耗大量的堆記憶體,一旦我們用了字串拼接,就有大量的字串占...