Python 当较低级别的日志记录到stdout时,自定义日志记录程序如何才能仅记录到stderr的错误/关键日志?
我正在努力实现以下目标: 如果我运行此代码:Python 当较低级别的日志记录到stdout时,自定义日志记录程序如何才能仅记录到stderr的错误/关键日志?,python,logging,Python,Logging,我正在努力实现以下目标: 如果我运行此代码: import logging logging.debug("debug") logging.info("info") logging.warning("warning") logging.error("error") logging.critical("critical") 我只希望消息“error”和“critical”转到stderr。现在“警告
import logging
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
我只希望消息“error”和“critical”转到stderr。现在“警告”-“严重”都转到stderr
因此,我尝试创建自己的自定义日志记录配置:
logconfig\u dict={
“处理程序”:{
“控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“调试”,
“流”:ext://sys.stdout",
},
“错误控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“错误”,
“流”:ext://sys.stderr",
},
},
“根”:{“级别”:“调试”,“处理程序”:[“控制台”,“错误控制台”]},
“版本”:1,
}
导入日志记录
从logging.config导入dictConfig
logging.basicConfig()文件
logging.getLogger().setLevel(logging.DEBUG)
dictConfig(logconfig\u dict)
调试(“调试”)
logging.info(“info”)
日志记录。警告(“警告”)
logging.error(“error”)
日志记录。关键(“关键”)
当这运行到stdout的所有五个日志时。“错误”和“严重”也被发送到stderr
鉴于上述情况,我只需要“error”和“critical”来停止访问标准输出
这似乎应该很容易做到,但选择一个范围,让您想将什么日志级别转到处理程序,但我没有看到中提到的功能。结果表明,按照Dan的建议使用过滤器很容易退出 基本上,您可以这样做以过滤出某个级别以上的日志:
def noErrorLogs():
如果param.levelno小于40,则返回lambda param:0,否则返回1
logconfig_dict={
“过滤器”:{
“myfilter”:{
“()”:无错误日志,
}
},
“处理程序”:{
“控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“调试”,
“流”:ext://sys.stdout",
“过滤器”:[“myfilter”],
}
},
“根”:{“级别”:“调试”,“处理程序”:[“控制台”]},
“版本”:1,
}
有关用于筛选的函数返回lambda的原因的详细信息,请参见:事实证明,按照Dan的建议使用筛选器很容易退出 基本上,您可以这样做以过滤出某个级别以上的日志:
def noErrorLogs():
如果param.levelno小于40,则返回lambda param:0,否则返回1
logconfig_dict={
“过滤器”:{
“myfilter”:{
“()”:无错误日志,
}
},
“处理程序”:{
“控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“调试”,
“流”:ext://sys.stdout",
“过滤器”:[“myfilter”],
}
},
“根”:{“级别”:“调试”,“处理程序”:[“控制台”]},
“版本”:1,
}
有关用于筛选的函数返回lambda的原因的详细信息,请参见:您可以在处理程序上使用筛选器来执行此操作。您可以在处理程序上使用筛选器来执行此操作。