我正在尝试用标准的Python日志记录到文件来替换一种旧的记录信息的方法。该应用程序目前有一个日志文件,它被设置为捕获信息和调试消息,所以我希望它在一个较低的级别,而不是由主日志捕获。
应用程序结构:
- mysite
- legacy
-- items
--- item1.py
-- __init__.py
-- engine.py
在item1.py
和engine.py
中是对旧的debug()
函数的调用,我不希望将该函数记录在legacy.log
中,但也不希望它们出现在mysite.log
文件中。
理想的工作方式是创建一个带有调试函数的包装器,该函数在新的级别上进行日志记录,我已经了解到这需要logging.logger
的扩展。
因此,在legacy/__init__.py
中,我编写了;
import logging
LEGACY_DEBUG_LVL = 5
class LegacyLogger(logging.Logger):
"""
Extend the Logger to introduce the new legacy logging.
"""
def legacydebug(self, msg, *args, **kwargs):
"""
Log messages from legacy provided they are strings.
@param msg: message to log
@type msg:
"""
if isinstance(msg, str):
self._log(LEGACY_DEBUG_LVL, msg, args)
logging.Logger.legacydebug = legacydebug
logger = logging.getLogger('legacy')
logger.setLevel(LEGACY_DEBUG_LVL)
logger.addHandler(logging.FileHandler('legacy.log'))
logging.addLevelName(LEGACY_DEBUG_LVL, "legacydebug")
从engine.py
和item1.py
中我可以执行;
from . import logger
debug = logger.legacydebug
编辑
登录主应用设置按此设置;
# settings.py
logging.captureWarnings(True)
logger = logging.getLogger()
logger.addHandler(logging.NullHandler())
logger.addHandler(logging.handlers.FileHandler('mysite.log'))
if DEBUG:
# If we're running in debug mode, write logs to stdout as well:
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
当使用多个记录器时,logging
模块在树结构中隐式地创建它们。结构由记录器名称定义:名为“animal”
的记录器将是名为“animal.cat”
和“animal.dog”
的记录器的父记录器。
在您的示例中,settings.py
中定义的未命名记录器是名为'legace'
的记录器的父记录器。未命名的记录器将接收通过'legacy'
记录器发送的消息,并将它们写入mysite.log
。
尝试为未命名的记录器指定一个名称,例如'mysite'
以破坏树结构。
问题内容: 我想为我的应用程序使用loglevel TRACE(5),因为我认为这还不够。另外不是我想要的。如何将自定义日志级别添加到Python记录器? 我有以下内容: 在我的代码中,我通过以下方式使用它: 现在我想打电话 在此先感谢您的帮助。 编辑 (2016年12月8日):我[pfa的)可接受答案更改为IMHO,这是基于Eric S的非常好的建议的出色解决方案。 问题答案: @Eric S.
我无法在gradle项目中添加自定义源代码集。如何初始化这里的版本号?我的gradle文件看起来像:
使用java.util.Logging时,可以在logging.properties文件中配置特定类的日志级别(即具有类名称的子记录器),如下所示: 我使用类名在MyClass中创建子记录器,如下所示: 在Google Web Toolkit gwt.xml文件中有类似的配置方法吗?
现在,它调用的一个java文件需要花费大量时间来完成。我没有这个类的访问权限,所以我想为那个特定的类设置一个特定的日志记录级别,以试图了解我的实现有什么问题。 我不想改变全局日志记录级别,我只想为某个类添加一个特定的级别,如何实现?
根记录器配置为级别的同步记录器。我还有几个异步记录器。其中一个异步记录器配置在自定义的较高日志级别(789)。这高于级别(600)。 这样做的原因是有一个日志级别,可以用于通过异步记录器及其自己的附加程序记录的特殊事件。 我们不希望将事件发送给同步根记录器或其他记录器。。但仅限于异步记录器及其相应的附加程序。。可能吗?
我有这些具体要求: 需要能够登录致命级别 现在,我的实现如下: 这是我的模式布局(在yaml): 以下是我的日志输出: 你知道如何有效地从日志输出中删除“错误”吗? 非常感谢你