python - 在python中的类之间记录

标签 python logging

我在 python 中有三个类,它们在不同的线程中运行。我想将所有类的输出输出到同一个文件。现在我在主类中创建了输出方法,并通过构造函数将其传递给其他类。有没有办法更好地处理它?除了使用构造器之外,我如何在类之间传递记录器?

也许 python 在 Java 中支持类似静态方法的东西,所以我可以在所有三个类中编写类似 Logger.info(message) 的东西?

另一种方法可能是将全局 sys.stdout 重定向到文件,即指定

logger = open('debug.txt', 'w')
sys.stdout = logger

然后在所有类中调用 sys.stdout。

你怎么看?

最佳答案

import logging
log = logging.getLogger("mylog")
log.setLevel(logging.DEBUG)

formatter = logging.Formatter(
    "%(asctime)s %(threadName)-11s %(levelname)-10s %(message)s")
# Alternative formatting available on python 3.2+:
# formatter = logging.Formatter(
#     "{asctime} {threadName:>11} {levelname} {message}", style='{')

# Log to file
filehandler = logging.FileHandler("debug.txt", "w")
filehandler.setLevel(logging.DEBUG)
filehandler.setFormatter(formatter)
log.addHandler(filehandler)

# Log to stdout too
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.INFO)
streamhandler.setFormatter(formatter)
log.addHandler(streamhandler)

# Test it
log.debug("Some message")
log.error("An error!")
try:
    something()
except:
    log.exception("An exception occured!")

并进入debug.txt:

2011-01-18 12:07:24,943  MainThread  DEBUG      Some message
2011-01-18 12:07:24,943  MainThread  ERROR      An error!
2011-01-18 12:07:24,943  MainThread  ERROR      An exception occured!
Traceback (most recent call last):
  File "./logtest.py", line 17, in 
    something()
NameError: name 'something' is not defined

请注意,消息在日志文件中出现的顺序可能与您从多个线程记录时它们发生的顺序不完全一致。

关于python - 在python中的类之间记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4722745/

相关文章:

java - Logback,设置每天最大历史文件

java - 在 log4j 中配置 RollingFileAppender

grails - 无法启用Grails日志记录

Windows 上的 Python 2.7——打开文件太多

python - 为什么 python dict.update() 不返回对象?

python - 在 python 中复制 shell 环境以执行 bash 命令

python - SQLAlchemy在Flask中的使用,Session管理实现

python - 一个非常简单的正则表达式的问题

json - Linux 从日志文件中剪切模式

javascript - 如何访问文件处理程序以使用 Typescript 在 deno 日志模块中运行 flush 方法