- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的日志文件和流设置不同的记录器级别,并且我(似乎)遵循了演示(https://docs.python.org/3/howto/logging-cookbook.html)到点。但是,在我的实际代码中它不起作用。在测试脚本中运行这个演示是有效的:
import logging
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
print(logger.handlers)
print(logger)
alex@alexpc:~/Projects/claritydb$ python test.py ; cat spam.log
2019-09-16 11:53:44,293 - simple_example - ERROR - error message
2019-09-16 11:53:44,293 - simple_example - CRITICAL - critical message
[<StreamHandler <stderr> (ERROR)>, <FileHandler /home/Projects/claritydb/spam.log (DEBUG)>]
<Logger simple_example (DEBUG)>
2019-09-16 11:53:44,293 - simple_example - DEBUG - debug message
2019-09-16 11:53:44,293 - simple_example - INFO - info message
2019-09-16 11:53:44,293 - simple_example - WARNING - warn message
2019-09-16 11:53:44,293 - simple_example - ERROR - error message
2019-09-16 11:53:44,293 - simple_example - CRITICAL - critical message
class MyClass(object):
def __init__(self,
verbosity_stream="WARNING",
verbosity_log="INFO"):
self.logger = self.setup_logger(verbosity_stream=verbosity_stream, verbosity_log=verbosity_log)
def setup_logger(self, verbosity_stream="ERROR", verbosity_log="WARNING"):
# Create a custom logger
logger = logging.getLogger(f"do_stuff")
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler(f"do_stuff.log", mode='w')
fh.setLevel(getattr(logging, verbosity_log))
ch = logging.StreamHandler()
ch.setLevel(getattr(logging, verbosity_stream))
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to the self.logger
logger.addHandler(ch)
logger.addHandler(fh)
print(logger.handlers)
return logger
print(self.logger.handlers)
print(self.logger)
[<StreamHandler <stderr> (ERROR)>, <FileHandler /home/Projects/claritydb/do_stuff.log (DEBUG)>]
<Logger do_stuff (DEBUG)>
logger = logging.getLogger(f"do_stuff")
logger = logging.getLogger()
最佳答案
当您调用 logger = logging.getLogger()
您将获得根记录器,然后附加您的处理程序并设置其级别等等。当你这样做 logger = logging.getLogger(f"do_stuff")
您将获得一个名为 do_stuff
的记录器但是根记录器仍然存在,并且您新创建的记录器将其日志传播到根记录器处理程序。由于在这种情况下,根记录器没有添加任何处理程序,因此它使用默认的 logging.lastResort
使用它的默认级别。您可以通过多种方式解决此问题。一种简单的解决方案是设置 logger.propagate = False
.
你也不需要这个fh.setLevel(getattr(logging, verbosity_log))
. Python 处理直接传入的字符串就好了。
关于Python 记录器忽略类中的 FileHandler 和 StreamHandler 级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962964/
如何将日志重定向到 TextArea?我试过这样获取日志信息: @Override public void initialize(URL arg0, ResourceBundle arg1) {
我有一个 CLI 脚本,它将所有进程记录到一个日志文件中。CLI 的功能之一是通过以下方式上传大文件将其分成几部分并并行上传。在 linux 中,整个过程就像一个魅力,但在 windows 我似乎无法
我有一个非常简单的结构。但我的两个日志处理程序中只有一个正在从我的模块进行日志记录: 程序.py,支持模块1.py,support_module2.py #program.py import supp
我试图在 python 代码执行的运行时删除 StreamHandler。 if (False == consoleOutput):
我正在编写一个 GeoFire 插件,我试图让 Dart 代码中的查询监听器可用,但没有成功。我似乎无法弄清楚如何为 EventChannel 设置 StreamHandler。要了解我的挣扎,您需要
我不知道如何将信息级消息记录到标准输出,但其他所有信息都记录到标准错误。我已经读过这篇 http://docs.python.org/library/logging.html .有什么建议吗? 最佳答
我想使用 python 的 StreamHandler 日志处理程序。我试过的是, import logging import sys mylogger = logging.getLogger("my
我将我的 Python 代码从 Win10 主机迁移到 WS2012R2。令人惊讶的是,它停止正常运行,现在显示警告消息:“UnicodeEncodeError:‘charmap’编解码器无法对位置
我使用多个处理程序,例如 rootLogger = logging.getLogger() rootLogger.basicConfig(filename = logfile, level=loggi
我一直在寻找一个很好的例子来将进程输出和错误流写入日志文件。我使用 apache-commons exec 库来执行我的进程。按照代码示例进行演示 public static int executeC
我有如下设置日志记录: def setUp(): LOG_FORMAT = '%(asctime)s %(levelname)-8s %(name)s %(message)s' #LO
我正在尝试为我的日志文件和流设置不同的记录器级别,并且我(似乎)遵循了演示(https://docs.python.org/3/howto/logging-cookbook.html)到点。但是,在我
重定向正常日志记录的输出工作正常: import contextlib import io import logging std_out_capture = io.StringIO() with co
使用单个 StreamHandler 是否安全?在多处理环境中? 更准确地说,只有一个 StreamHandler 可以简单地将所有进程的日志记录打印到 stdout 吗?像这样,例如: import
我不知道为什么它无法记录该消息,我认为一切都已正确设置。 logging.DEBUG 定义在 logging 模块下 import logging import sys logger = loggin
假设我有如下脚本,我无法编辑它: import logging logger = logging.getLogger('simple_example') logger.setLevel(logging
我有一个普通的 python(非 Django)项目,我正在尝试 tie Raven into the logging setup . 在我们当前的设置下,我们使用一个简单的日志配置: import
我的 Python 应用程序中有一个 RotatingFileHandler 和 StreamHandler 。这是在 docker 容器中的 apache 服务器中运行的。因此,我将 apache
我在基本配置中设置了两个日志处理程序。 FileHandler 记录到文件,StreamHandler 记录到标准输出。 logging.basicConfig( format="%(asct
python 模块 paramiko 抛出一个奇怪的异常,如磁贴上所示。最后我找到了它真正出现的位置,它在模块 logging 中。当我使用 pydev 在 Eclipse 中的行上设置断点,并将行放
我是一名优秀的程序员,十分优秀!