使用Python的logging.config
Python的logging模塊接口仿log4j,概念上一致,使用上相當方便。
利用logging.config.fileConfig(),可以將日志的配置用文件來描述,簡化了日志的初始化。
例程:
配置文件示例如下:
注意,RotatingFileHandler中doRollover()會因為rename()出錯而中途退出,造成日志文件沒有打開,并且后繼的日志消息都因為日志文件沒有打開而失敗。可以自己在rename()處加上try,或者不用RotatingFileHandler。估計隔一段時間就fileConfig()一次也是可以恢復正常。
詳見:Python logging RotatingFileHandler bug
該錯誤僅當日志文件滿時切換文件時才可能發生,當文件被鎖定時才會出錯。正常使用不會有問題,并且日志出錯不會影響主程序的運行。所以可以放心使用,想再可靠點就直接在源碼中加個try.
(轉載請注明來源于金慶的專欄)
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!")
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,rotateFileHandler
[logger_example]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=example
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('test.log', 'a', 200000, 9)
[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,rotateFileHandler
[logger_example]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=example
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('test.log', 'a', 200000, 9)
注意,RotatingFileHandler中doRollover()會因為rename()出錯而中途退出,造成日志文件沒有打開,并且后繼的日志消息都因為日志文件沒有打開而失敗。可以自己在rename()處加上try,或者不用RotatingFileHandler。估計隔一段時間就fileConfig()一次也是可以恢復正常。
詳見:Python logging RotatingFileHandler bug
該錯誤僅當日志文件滿時切換文件時才可能發生,當文件被鎖定時才會出錯。正常使用不會有問題,并且日志出錯不會影響主程序的運行。所以可以放心使用,想再可靠點就直接在源碼中加個try.
(轉載請注明來源于金慶的專欄)