Python对多个文件的日志记录
我已经阅读了日志模块文档,虽然我可能遗漏了一些明显的东西,但我得到的代码似乎并没有按预期工作。我正在使用Python 2.6.4 我的程序由几个不同的python文件组成,我希望从中向文本文件发送日志消息,并可能向屏幕发送日志消息。我想这是一件很平常的事,所以我把事情搞砸了 我的代码现在正在做的是正确地记录到文本文件中。但是,登录到屏幕的日志正在被复制,一个具有指定的格式,另一个不具有指定的格式。另外,当我关闭屏幕输出时,我仍然会打印一次文本,这是我不想要的,我只是希望它被记录到文件中 无论如何,一些代码:Python对多个文件的日志记录,python,logging,error-logging,Python,Logging,Error Logging,我已经阅读了日志模块文档,虽然我可能遗漏了一些明显的东西,但我得到的代码似乎并没有按预期工作。我正在使用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:25335-调试:
信息和彩虹
在my/tmp/logs/Stumbler.log中
2010-01-08 15:39:25335-信息:
记录器初始化。2010-01-08
15:39:25335-调试::消息和
彩虹
当我在Python2.4、2.5和2.6.4中运行它时,这一切都如期进行了。我的其他一些模块中仍在使用logging.basicConfig()。我从来没有想到他们会造成这些问题。非常感谢。