在我使用的代码中logging.info(...,在此之前我使用logging.basicConfig(filename=.... 是否可以在代码中保留日志行而不做任何事情?
Sim*_*ser 13
您可以使用:
logging.disable(logging.CRITICAL)
Run Code Online (Sandbox Code Playgroud)
要禁用所有日志调用,其在临界水平或以下。这实际上会禁用所有日志记录调用。
您可以通过执行以下操作再次启用所有记录器的日志记录(在它们自己的日志记录级别):
logging.disable(logging.NOTSET)
Run Code Online (Sandbox Code Playgroud)
Mag*_*ero 11
日志记录具有以下结构:
\nlogging.WARNING默认为根记录器,logging.NOTSET默认为非根记录器)和一个有效级别(非根记录器的父记录器的有效级别,否则logging.NOTSET为记录器的级别);logging.NOTSET默认情况下);日志记录有以下过程(用流程图表示):
\n\n因此,要禁用特定记录器,您可以采用以下策略之一:
\n将记录器的级别设置为logging.CRITICAL + 1。
使用主要 API:
\nimport logging\n\nlogger = logging.getLogger("foo")\nlogger.setLevel(logging.CRITICAL + 1)\nRun Code Online (Sandbox Code Playgroud)\n使用配置 API:
\nimport logging.config\n\nlogging.config.dictConfig({\n "version": 1,\n "loggers": {\n "foo": {\n "level": logging.CRITICAL + 1\n }\n }\n})\nRun Code Online (Sandbox Code Playgroud)\nlambda record: False向记录器添加过滤器。
使用主要 API:
\nimport logging\n\nlogger = logging.getLogger("foo")\nlogger.addFilter(lambda record: False)\nRun Code Online (Sandbox Code Playgroud)\n使用配置 API:
\nimport logging.config\n\nlogging.config.dictConfig({\n "version": 1,\n "filters": {\n "all": {\n "()": lambda: (lambda record: False)\n }\n },\n "loggers": {\n "foo": {\n "filters": ["all"]\n }\n }\n})\nRun Code Online (Sandbox Code Playgroud)\n删除记录器的现有处理程序,向记录器添加一个处理程序logging.NullHandler()logging.lastResort(以防止事件由使用logging.StreamHandler当前流sys.stderr和级别的处理程序处理logging.WARNING)并将记录器的属性设置propagateFalse为(以防止事件被处理由记录器的祖先记录器的处理程序)。
使用主要 API:
\nimport logging\n\nlogger = logging.getLogger("foo")\nfor handler in logger.handlers.copy():\n try:\n logger.removeHandler(handler)\n except ValueError: # in case another thread has already removed it\n pass\nlogger.addHandler(logging.NullHandler())\nlogger.propagate = False\nRun Code Online (Sandbox Code Playgroud)\n使用配置 API:
\nimport logging.config\n\nlogging.config.dictConfig({\n "version": 1,\n "handlers": {\n "null": {\n "class": "logging.NullHandler"\n }\n },\n "loggers": {\n "foo": {\n "handlers": ["null"],\n "propagate": False\n }\n }\n})\nRun Code Online (Sandbox Code Playgroud)\n警告。\xe2\x80\x94 与仅阻止记录器及其祖先记录器的处理程序发出记录器记录的事件的策略 1 和 2 相反,策略 3 还阻止记录器的后代记录器logging.getLogger("foo.bar")记录的事件(例如)由记录器及其祖先记录器的处理程序发出。
笔记。disabled\xe2\x80\x94 将记录器的属性设置为True并不是另一种策略,因为它不是公共 API 的一部分(参见https://github.com/python/cpython/issues/80499):
import logging\n\nlogger = logging.getLogger("foo")\nlogger.disabled = True # DO NOT DO THIS\nRun Code Online (Sandbox Code Playgroud)\n
编辑:似乎disabled不应该供公众使用。查看Maggyero 的答案以获取替代解决方案。
只需禁用日志处理程序,它就不会再写入任何内容。
logging.getLogger().disabled = True
Run Code Online (Sandbox Code Playgroud)
请注意,每个记录器都可以有处理程序,因此可能会有更多处理程序。
| 归档时间: |
|
| 查看次数: |
8534 次 |
| 最近记录: |