Python的logging模組介面仿log4j,概念上一致,使用上相當方便。利用logging.config.fileConfig(),可以將日誌的配置用檔案來描述,簡化了日誌的初始化。
常式:
# test.py
import logging
import logging.config
logging.config.fileConfig("logging.conf")
#create logger
logger = logging.getLogger("example")
#"application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
logHello = logging.getLogger("hello")
logHello.info("Hello world!")
設定檔樣本如下:
# logging.conf
[loggers]
keys=root,example
[handlers]
keys=consoleHandler,rotateFileHandler
[formatters]
keys=simpleFormatter
[formatter_simpleFormatter]
format=[%(asctime)s](%(levelname)s)%(name)s : %(message)s
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_example]
level=DEBUG
handlers=rotateFileHandler
qualname=example
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_rotateFileHandler]
class=RotatingFileHandler
level=INFO
formatter=simpleFormatter
args=('test.log', 'a', 200000, 9)
注意,RotatingFileHandler中doRollover()會因為rename()出錯而中途退出,造成記錄檔沒有開啟,並且後繼的日誌訊息都因為記錄檔沒有開啟而失敗。可以自己在rename()處加上try,或者不用RotatingFileHandler。估計隔一段時間就fileConfig()一次也是可以恢複正常。
詳見:Python logging RotatingFileHandler bug 該錯誤僅當記錄檔滿時切換檔案時才可能發生,當檔案被鎖定時才會出錯。正常使用不會有問題,並且日誌出錯不會影響主程式的運行。所以可以放心使用,想再可靠點就直接在源碼中加個try.
檔案來自:http://www.cppblog.com/jinq0123/archive/2007/09/03/usingloggingconfig.html