在我正在编写的python脚本中,我尝试使用日志模块记录事件。我有以下代码来配置我的记录器:
ERROR\u FORMAT=“%(行号)d:%(消息)s中的%(级别名称)s在%(asctime)s在%(funcName)s在%(文件名)中
DEBUG_FORMAT=“%(asctime)s:%(消息)s处的%(文件名)s中的%(行号)d”
LOG_CONFIG={'version':1,
'格式化程序':{'error':{'format':error\u format},
'debug':{'format':debug_format},
'handlers':{'console':{'class':'logging.StreamHandler',
“格式化程序”:“调试”,
“级别”:logging.DEBUG},
'file':{'class':'logging.FileHandler',
'filename':'/usr/local/logs/DatabaseUpdate.log',
“格式化程序”:“错误”,
“级别”:logging.ERROR},
'root':{'handlers':('console','file')}
logging.config.dictConfig(LOG\u config)
当我尝试运行logging.debug(“某些字符串”)时,我没有得到控制台的输出,即使文档中的这个页面说logging.debug应该让根记录器输出消息。为什么我的程序没有输出任何东西,我如何修复它
许多年后,Python记录器似乎仍然存在可用性问题。以下是一些示例说明:
导入日志
#这会将根记录器设置为写入stdout(您的控制台)。
#您的脚本/应用程序至少需要在某个地方调用此函数一次。
logging.basicConfig()文件
#默认情况下,根记录器设置为“警告”,并且您定义的所有记录器都设置为“警告”
#继承该值。这里我们将根记录器设置为NOTSET。此日志记录
#级别由所有现有和新的子记录器自动继承
#这不会设置更详细的级别。
logging.root.setLevel(logging.NOTSET)
#下一行还设置了根记录器级别。
#它相当于前面两个语句的总和:
logging.basicConfig(级别=logging.NOTSET)
#您可以在所有文件之间共享“logger”对象,也可以在
#命名句柄(这里是“我的应用程序”),并用它调用“logging.getLogger”。
#结果是一样的。
handle=";“我的应用程序”;
logger1=logging.getLogger(句柄)
logger2=logging.getLogger(句柄)
#logger1和logger2指向同一个对象:
#(logger1是logger2)=真
logger=logging.getLogger(“我的应用程序”)
#按从高到低的详细顺序排列的方便方法
debug(“这将被打印出来”)
logger.info(“这将被打印”)
logger.warning(“这将被打印”)
logger.error(“这将被打印”)
logger.critical(“这将被打印”)
#在希望对日志记录进行更多控制的大型应用程序中,
#从主应用程序记录器创建子记录器。
component_logger=logger.getChild(“component-a”)
component_logger.info(“这将以前缀'my app.component-a'”打印出来”)
#如果希望控制日志记录级别,可以在任何位置设置该级别
#在层次结构中:
#
#-根
#-我的应用程序
#-a部分
#
#发展的例子:
logger.setLevel(logging.DEBUG)
#如果打印太多,请仅为组件启用调试打印:
组件_logger.setLevel(logging.DEBUG)
#对于您想要的产品:
logger.setLevel(logging.WARNING)
一个常见的混淆源来自一个初始化错误的根记录器。考虑这一点:
导入日志
log=logging.getLogger(“myapp”)
日志警告(“woot”)
logging.basicConfig()文件
日志警告(“woot”)
输出:
woot
警告:myapp:woot
根据您的运行时环境和日志记录级别,第一个日志行(在基本配置之前)可能不会显示在任何地方