Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当较低级别的日志记录到stdout时,自定义日志记录程序如何才能仅记录到stderr的错误/关键日志?_Python_Logging - Fatal编程技术网

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的原因的详细信息,请参见:

您可以在处理程序上使用筛选器来执行此操作。您可以在处理程序上使用筛选器来执行此操作。