Python 日志记录 - 将日期设置为文件名

标签 python logging

我正致力于在我的 Python 项目中实现日志记录,但遇到了一些障碍。我正在尝试设置我的日志记录,以便将处理程序和格式化程序全部组织到一个配置文件中。我现在想做的是设置我的 fileHandler,这样它将创建一个看起来像这样的日志文件:YYYY_MM_DD.log 显然带有 Y代表年,M代表月,D代表日。

这是我尝试使用我的配置文件:

[loggers]
keys=root,MainLogger

[handlers]
keys=fileHandler, consoleHandler

[formatters]
keys=logFormatter, consoleFormatter

[logger_root]
level=DEBUG
handlers=fileHandler

[logger_MainLogger]
level=DEBUG
handlers=fileHandler, consoleHandler
qualname=MainLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=logFormatter
args=(datetime.now().strftime('%Y_%m_%d.log'), 'a')

[formatter_logFormatter]
format=%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s

[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(fillname)s-%(funcName)s-%(lineno)04d | %message)s

我用来测试配置的文件非常简单:

import logging
import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('MainLogger')
logger.debug("TEST")

我目前遇到的具体错误是:

configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: "%Y_%m_%d.log'), 'a')"

我已尝试按照错误提示更改 %Y%m%d,但这并没有解决问题。我该如何设置配置文件,使我的日志文件看起来像我希望的那样?

我应该注意到,当我将文件名更改为 test.log 时,一切正常,所以这是我遇到的唯一错误。

最佳答案

您不能在配置文件中使用datetime,因为它不知道它的含义。但是,您可以在 python 文件本身中添加 Filehandler:

import logging.config
from datetime import datetime

logging.config.fileConfig('aaa.conf')
logger = logging.getLogger('MainLogger')

fh = logging.FileHandler('{:%Y-%m-%d}.log'.format(datetime.now()))
formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s')
fh.setFormatter(formatter)

logger.addHandler(fh)
logger.debug("TEST")

这样您就可以在处理程序中将日期设置为文件名。

这是配置文件,请注意你在最后一个格式化程序中有一个错字,你把 fillname 而不是 filename 而你忘记了 (消息中。

[loggers]
keys=root,MainLogger

[handlers]
keys=consoleHandler

[formatters]
keys=consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_MainLogger]
level=DEBUG
handlers=consoleHandler
qualname=MainLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)

[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(filename)s-%(funcName)s-%(lineno)04d | %(message)s

这应该可以正常工作。

关于Python 日志记录 - 将日期设置为文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446099/

相关文章:

.net - 我应该使用哪个 NoSQL 数据库进行日志记录?

python - AWS Lambda 运行在 Windows 中创建的 zip 包

jquery - Ansible - 组合两个变量将 [u...] 添加到其中之一

python - ubuntu 的 fatal error : yara. h : file not found when installing yara,

python - Pandas 、应用函数和 lambda

java - 有没有办法从 java.util.logging.Logger 输出中删除信息行?

Linux 文件日志

java - 配置 Sentry 以使用 log4j2 进行日志记录时出错

python - 停止捕获基于 Django 中的 url 的任何字符串(正则表达式)

java - log4j 尝试登录文件