对于我在Python(2.7)中的第一个日志记录实验,我正在创建一个基本的日志记录模块,它将快速为创建一个记录器(这样我就不必为每个模块/类配置它)。
我想要做的是创建一个日志程序,它在控制台上显示所有级别信息及更高级别的消息,并将所有调试级别信息移动到一个文本文件中。
到目前为止,我已经创建了一个日志程序,它打印信息直到控制台,并将每个日志消息打印到一个文本文件。然而,我不想要所有的信息和更高的消息在我的文本文件。
我已经做了一个Python小提琴,用来保存我的代码。
我使用了教程中的以下调试消息:
log.debug('All systems operational')
log.info('Airspeed 300 knots')
log.warn('Low on fuel')
log.error('No fuel. Trying to glide.')
log.critical('Glide attempt failed. About to crash.')
在控制台上产生:
[INFO] root: Airspeed 300 knots
[WARNING] root: Low on fuel
[ERROR] root: No fuel. Trying to glide.
[CRITICAL] root: Glide attempt failed. About to crash.
在我的debug_log.txt文件中:
2013-06-14 14:51:46,963:DEBUG:root:All systems operational
2013-06-14 14:51:46,964:INFO:root:Airspeed 300 knots
2013-06-14 14:51:46,964:WARNING:root:Low on fuel
2013-06-14 14:51:46,964:ERROR:root:No fuel. Trying to glide.
2013-06-14 14:51:46,964:CRITICAL:root:Glide attempt failed. About to crash.
在上面的块中,后四行不应该在文件中。我想做的事情可能吗?我怎样才能得到我想要的结果?
您必须创建自己的处理程序对象。
来自文档:位于核心日志记录包中的FileHandler类将日志记录输出发送到磁盘文件。它继承了StreamHandler的输出功能。因此这里的想法是扩展FileHandler
类,并在emit()
方法中,筛选出不在logging.debug
级别的所有record
对象。
我没有测试过它,但我认为它可以起作用:
from logging import FileHandler, DEBUG
log = logging.getLogger('foo')
class DebugFileHandler(FileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False)
super().__init__(filename, mode, encoding, delay)
def emit(self, record):
if not record.levelno == DEBUG:
return
super().emit(record)
log.addHandler(DebugFileHandler())
当然,您必须使此代码与您的代码相适应。而且,老实说,record.level
是一种胡乱的猜测,但我认为这是有道理的:-)而且,我猜对了!
在本例中,处理程序将仅应用于foo
记录器。您可能希望为您的主处理程序激活它,或者只为某些特定的处理程序激活它,这是您可能更喜欢的。
我怀疑这可能是我包含的一个库,它正在扰乱我的日志。这有可能吗?librray可以改变我的日志显示方式吗?既然我有点迷路了,我该怎么调查呢?
我使用Kubernetes作为cron作业运行python脚本。问题是,直到作业完成后,我才看到脚本的输出(可能需要一段时间才能运行)。我怀疑这是由于日志记录级别(--v选项)造成的,但在我的整个生命周期中,我都找不到它的文档(默认为--v=0)。如果我想增加输出内容的详细程度,是否有人知道“INFO”或“TRACE”的值(或者这些值是什么/定义在哪里)?提前谢谢你的帮助。 编辑:是否有人在Kub
我希望将具有特定记录器名称、特定级别和更高级别(例如和更高级别)的消息记录到特定日志处理程序(例如文件处理程序),同时仍将所有日志消息发送到控制台。Python是2.7版。 到目前为止,我尝试创建了两个记录器: 根记录器 命名记录器 对于根记录器,我附加了,并将日志级别设置为。 然后,我将一个处理程序附加到命名记录器,并将该记录器的级别设置为。 当我现在调用使用命名记录器的模块时,我不再获得传播到
一般来说,你应该在运行时增加调试选项来调试问题;也可以把调试选项添加到 Ceph 配置文件里来调试启动问题,然后查看 /var/log/ceph (默认位置)下的日志文件。 Tip 调试输出会拖慢系统,这种延时有可能掩盖竞争条件。 日志记录是资源密集任务。如果你碰到的问题在集群的某个特定区域,只启用那个区域对应的日志功能即可。例如,你的 OSD 运行良好、元数据服务器却不行,这时应该先打开那个可疑
有人能帮我设置日志级别以调试和捕获更多日志所需的spark配置吗
问题内容: 我正在使用python日志记录模块在python代码中记录事件。我也希望记录2个日志文件,一个包含用户信息,另一个包含针对开发人员的更详细的日志文件。我已将两个日志文件设置为所需的级别(usr.log = INFO和dev.log = ERROR),但无法解决如何将日志记录限制为usr.log文件,因此仅写入INFO级别日志到日志文件,而不是INFO以及上面的所有其他内容,例如INFO