gpt4 book ai didi

Python 记录多个文件

转载 作者:太空狗 更新时间:2023-10-29 22:14:27 25 4
gpt4 key购买 nike

我已经通读了日志记录模块文档,虽然我可能遗漏了一些明显的东西,但我得到的代码似乎没有按预期工作。我正在使用 Python 2.6.4。

我的程序由几个不同的 python 文件组成,我想从中将日志消息发送到文本文件,并可能发送到屏幕。我想这是一件很常见的事情,所以我在某个地方搞砸了。

我的代码目前正在做的是正确地记录到文本文件,有点。但是登录到屏幕被复制,一个具有指定的格式,一个没有。此外,当我关闭屏幕输出时,我仍然会打印一次文本,这是我不想要的 - 我只想将它记录到文件中。

无论如何,一些代码:

#logger.py
import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
logdir = os.path.abspath(logdir)

if not os.path.exists(logdir):
os.mkdir(logdir)

log = logging.getLogger('stumbler')
log.setLevel(loglevel)

log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

if txtlog:
txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
txt_handler.doRollover()
txt_handler.setFormatter(log_formatter)
log.addHandler(txt_handler)
log.info("Logger initialised.")

if scrnlog:
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
log.addHandler(console_handler)

那里没有什么不寻常的。

#core.py
import logging
corelog = logging.getLogger('stumbler.core') # From what I understand of the docs, this should work :/

class Stumbler:
[...]

corelog.debug("Messages and rainbows...")

屏幕输出显示了这是如何复制的:

2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe

虽然文本文件得到格式正确的输出,但在 logger.py 中关闭屏幕注销仍然显示格式不正确的输出。

根据我对文档的理解,调用 corelog.debug(),看到 corelog 是“stumbler”记录器的子项,它应该使用该格式并输出日志。

对于这样一个微不足道的问题的文章表示歉意。

TL;DR:如何从多个文件进行日志记录?

最佳答案

您确定在导入的任何内容中都没有进行其他日志记录设置吗?

控制台日志中的错误输出看起来像是记录器的默认配置,因此可能是其他原因造成的。

运行这个快速测试脚本:

import logging
from logging.handlers import RotatingFileHandler
import os

def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
logdir = os.path.abspath(logdir)

if not os.path.exists(logdir):
os.mkdir(logdir)

log = logging.getLogger('stumbler')
log.setLevel(loglevel)

log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")

if txtlog:
txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
txt_handler.doRollover()
txt_handler.setFormatter(log_formatter)
log.addHandler(txt_handler)
log.info("Logger initialised.")

if scrnlog:
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
log.addHandler(console_handler)



setup_logging('/tmp/logs')
corelog = logging.getLogger('stumbler.core')
corelog.debug("Messages and rainbows...")

产生这个结果:

2010-01-08 15:39:25,335 - DEBUG :: Messages and rainbows...

在我的/tmp/logs/Stumbler.log 中

2010-01-08 15:39:25,335 - INFO :: Logger initialised. 2010-01-08 15:39:25,335 - DEBUG :: Messages and rainbows...

当我在 python 2.4、2.5 和 2.6.4 中运行它时,它按预期工作

关于Python 记录多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com