python - 对带有配置文件的 python 日志记录感到困惑(仅记录在配置文件中为 root_logger 设置的内容)
问题描述
我(现在)有以下代码:
import logging
from logging.config import fileConfig
def function1():
logger = logging.getLogger('function1')
logger.debug('Debug')
logger.info('Info')
logger.warning('Warn')
logger.critical('Critical')
def main():
fileConfig('test_log.conf')
logger = logging.getLogger('main')
logger.debug('Debug')
logger.info('Info')
logger.warning('Warn')
logger.critical('Critical')
function1()
if __name__ == '__main__':
main()
我有以下配置文件:
[loggers]
keys:root,log1
[handlers]
keys:consoleHandler,rotatingFileHandler
[formatters]
keys:logFormatter
[logger_root]
level:INFO
handlers:rotatingFileHandler,consoleHandler
[logger_log1]
level:DEBUG
handlers:rotatingFileHandler, consoleHandler
qualname:main
propagate=1
[handler_consoleHandler]
class:StreamHandler
formatter:logFormatter
args:(sys.stdout,)
[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler
level=NOTSET
args=('logs/Log.log', 'w', 5000)
formatter=logFormatter
[formatter_logFormatter]
format:%(asctime)s - %(name)s -%(levelname)s - %(message)s
当我运行时,我得到以下输出:
2020-03-23 19:16:30,529 - main -DEBUG - Debug
2020-03-23 19:16:30,529 - main -DEBUG - Debug
2020-03-23 19:16:30,530 - main -INFO - Info
2020-03-23 19:16:30,530 - main -INFO - Info
2020-03-23 19:16:30,530 - main -WARNING - Warn
2020-03-23 19:16:30,530 - main -WARNING - Warn
2020-03-23 19:16:30,530 - main -CRITICAL - Critical
2020-03-23 19:16:30,530 - main -CRITICAL - Critical
2020-03-23 19:16:30,531 - function1 -INFO - Info
2020-03-23 19:16:30,531 - function1 -WARNING - Warn
2020-03-23 19:16:30,531 - function1 -CRITICAL - Critical
我给了每个记录器的名字,但我仍然有同样的问题
原帖:
我有以下代码:
def main():
import logging
from logging.config import fileConfig
fileConfig('logging.conf')
logger = logging.getLogger()
logger.debug('Debug')
logger.info('Info')
logger.warning('Warn')
logger.critical('Critical')
if __name__ == '__main__':
main()
我有以下配置文件:
[loggers]
keys:root,log1
[handlers]
keys:consoleHandler,rotatingFileHandler
[formatters]
keys:logFormatter
[logger_root]
level:INFO
handlers:rotatingFileHandler,consoleHandler
[logger_log1]
level:DEBUG
handlers:rotatingFileHandler, consoleHandler
qualname:main
propagate=1
[handler_consoleHandler]
class:StreamHandler
formatter:logFormatter
args:(sys.stdout,)
[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler
level=NOTSET
args=('logs/Log.log', 'w', 5000)
formatter=logFormatter
[formatter_logFormatter]
format:%(asctime)s - %(name)s -%(levelname)s - %(message)s
当我运行时,我得到以下输出:
2020-03-23 18:13:54,950 - tedCheck.main -WARNING - Warn
2020-03-23 18:13:54,950 - tedCheck.main -CRITICAL - Critical
我所期望的是,无论 root_logger 设置为什么,我都可以在配置文件的功能/方法的特定日志部分中覆盖它。
如果要执行 root_logger 设置的任何操作,那么拥有该部分有什么好处?我的猜测是我的配置文件以某种方式被冲洗掉了。
解决方案
此行获取层次结构中的根记录器,特别是:
logger = logging.getLogger()
如果您不想要根记录器,那么您需要传递一个名称
logger = logging.getLogger(name="main")
请注意,使用您现有的配置,以及为 root 配置的传播 log1 和控制台/文件处理程序,您可能会看到重复的日志事件。
推荐阅读
- amazon-cloudformation - 是否可以创建 Cloudfromation 模板以部署到 AWS EKS?
- file - 如何在 Flutter 中下载 mp3 文件并将其保存在用户设备存储中?
- java - 我如何创建 PDF 表单,而不是用 Java 中的用户生成的数据填充它,使用 iText?
- apache - 如何在 Apache 中允许多种身份验证类型?
- java - 如何转换 MultiValueMap
到地图 > 与流? - azure-table-storage - 使用逻辑应用从 Azure 表存储中获取值
- c - 二进制的无效操作数 - (有 'int' 和 'int *')
- java - scala - 打印 26*8 矩阵以获取时间戳的所有格式值
- firebase - Zapier Firebase 标记
- visual-studio - SSIS 错误 - 由于 80040153、注册表值无效,从 SQL 任务中解析查询失败