程序员可以通过三种方式配置日志记录:
使用显式创建记录器,处理程序和格式化程序。
创建一个日志配置文件并使用该
fileConfig()
功能读取它。创建配置信息字典并将其传递给
dictConfig()
函数。
-
显式创建记录器,处理程序和格式化程序:
import logging
# 创建一个日志记录仪
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# 创建控制台处理程序并将级别设置为debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 创建格式化程序
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 将格式化程序添加到ch对象
ch.setFormatter(formatter)
# 在日志记录器中添加ch对象
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
打印结果:
$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message
-
创建一个日志配置文件并使用该
fileConfig()
功能读取
以下Python模块创建的记录器,处理程序和格式化程序几乎与上面示例中的记录器,处理程序和格式化程序相同,唯一的区别是对象的名称
import logging
import logging.config
logging.config.fileConfig('logging.conf')
# create logger
logger = logging.getLogger('simpleExample')
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
logging.conf 文件
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt= '%Y-%m-%d %H:%M:%S'
打印结果:
$ python simple_logging_config.py
2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
2005-03-19 15:38:55,979 - simpleExample - INFO - info message
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
您可以看到,配置文件方法比Python代码方法具有一些优势,主要是配置和代码的分离以及非编码器轻松修改日志记录属性的能力
-
创建配置信息字典并将其传递给
dictConfig()
函数。
import logging
import logging.config
logging.config.dictConfig('log_dict')
# create logger
logger = logging.getLogger('simpleExample')
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
{
'version': 1,
'formatters': {
'simple': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'simple'
},
},
'loggers': {
'simpleExample': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': 'no'
},
},
'root': {
'level': 'DEBUG',
'handlers': ['console']
}
}
打印结果:
2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
2005-03-19 15:38:55,979 - simpleExample - INFO - info message
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
-
扩展
更多内容学习请查看 logging官方文档