使用 logger 在指令碼中輸出多個日誌

2021-07-27 21:16:00 字數 3070 閱讀 1170

最近在寫乙個小工具的時候,在某個指令碼中需要為不同物件,輸出單獨的屬於該物件的日誌檔案,方便檢視。

通常在寫 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物件是不可變的,所以會消耗大量的堆記憶體,一旦我們用了字串拼接,就有大量的字串占...