python怎么设置根据文件名_Python记录-将日期设置为文件名

在Python项目中实现日志记录时,遇到问题,尝试通过配置文件设置fileHandler,使日志文件名为YYYY_MM_DD.log格式。错误提示涉及配置文件中的日期格式。解决方案是在Python代码中直接创建FileHandler,利用datetime.now()设置动态日期格式的日志文件名。
摘要由CSDN通过智能技术生成

I am working on implementing logging within my Python project and have hit a bit of a snag. I am trying to set up my logging such that the Handlers, and Formatters are all organized into a configuration file. What I am trying to do at the moment is to set up my fileHandler such that it will create a log file that looks something like this: YYYY_MM_DD.log obviously with the Y's representing the year, M's representing the month, and D's representing the day.

This is what I have attempted with my config file:

[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

The file I am using to test the configuration is pretty simple:

import logging

import logging.config

logging.config.fileConfig('logging.conf')

logger = logging.getLogger('MainLogger')

logger.debug("TEST")

The specific error I am getting at the moment is:

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

I've tried changing the %Y, %m, and %d as the error says, but that doesn't fix the problem. How do I go about setting up the config file so that my log files look the way I want them to?

I should note when I change the filename to test.log everything worked fine, so this is the only error I seem to be having with this.

解决方案

You can't use datetime in a config file, as it doesn't know what it means. You can however add the Filehandler in the python file itself:

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")

This way you can set the date as the file name in the handler.

This is the config file, note that you had a typo in the last formatter, you put fillname instead of filename and you forgot ( in message.

[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

This Should work just fine.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值