Python 的日志记录可以使用 logging 模块。特别是对于多个模块共用日志系统时非常方便,只需要在主模块中导入日志配置,子模块中直接获取日志句柄就行。有点类似于 Java 的 Log4j 或 Logback 之类。
配置文件
[loggers]
keys=root,mylogger
[handlers]
keys=consoleHandler,rotateFileHandler
[formatters]
keys=simpleFormatter,myFormatter
[formatter_simpleFormatter]
format=[%(asctime)s](%(levelname)s)%(name)s : %(message)s
[formatter_myFormatter]
format=[%(asctime)s][%(filename)s - line:%(lineno)d] [%(levelname)s] %(message)s
[logger_root]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
[logger_mylogger]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=example
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=myFormatter
args=(sys.stdout,)
[handler_rotateFileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=myFormatter
args=('path/to/logs/my.log', 'D', 1, 0)
使用示例
import logging
import logging.config
logging.config.fileConfig(os.path.split(os.path.realpath(__file__))[0]+"/conf/logging.conf")
logger = logging.getLogger("mylogger")
logger.debug("%s", "Hello World!")
实践问题
- 多模块共用日志时,如果主模块导入日志配置后,子模块又导入一次,会出现无法输出日志或者日志错乱的现象。