如何修改Python logging配置移除秒小数位?支持f-string吗?
解决Python日志的两个需求:移除秒小数位 + 使用f-string格式化
1. 移除日志时间的秒小数位
你的现有配置中,%(asctime)s默认会输出带毫秒的时间(如,247),只需给formatter添加datefmt参数,指定不带毫秒的时间格式即可实现需求。
修改后的配置文件:
[formatter_fileFormatter] format=[%(asctime)s] %(levelname)-8s %(name)-12s %(message)s datefmt=%Y-%m-%d %H:%M:%S
修改后对应的日志输出:
[2022-12-14 11:21:50] INFO my_logger.mod1 This is an info log message from func1
datefmt参数直接定义%(asctime)s的输出格式,%Y-%m-%d对应年月日,%H:%M:%S对应时分秒,完全剔除了毫秒部分。
2. 使用f-string进行日志格式化
Python logging的默认Formatter不直接支持f-string语法,需要自定义Formatter类来实现,核心是重写format方法,用f-string拼接日志字段。
代码实现示例
import logging from datetime import datetime class FStringFormatter(logging.Formatter): def format(self, record): # 自定义时间格式(可按需调整) record.asctime = datetime.fromtimestamp(record.created).strftime('%Y-%m-%d %H:%M:%S') # 用f-string编写日志模板 return f"[{record.asctime}] {record.levelname:<8} {record.name:<12} {record.message}" # 配置并测试日志 logger = logging.getLogger('my_logger.mod1') logger.setLevel(logging.INFO) file_handler = logging.FileHandler('app.log') file_handler.setFormatter(FStringFormatter()) logger.addHandler(file_handler) logger.info("This is an info log message from func1")
配置文件方式适配(dictConfig)
如果习惯用配置文件管理日志,可在dictConfig中指定自定义Formatter类的路径:
import logging.config logging.config.dictConfig({ 'version': 1, 'formatters': { 'fstringFormatter': { 'class': '__main__.FStringFormatter' # 替换为你的类所在模块路径 } }, 'handlers': { 'fileHandler': { 'class': 'logging.FileHandler', 'filename': 'app.log', 'formatter': 'fstringFormatter' } }, 'loggers': { 'my_logger.mod1': { 'handlers': ['fileHandler'], 'level': 'INFO' } } })
内容的提问来源于stack exchange,提问作者Mick Sulley
相关产品推荐
相关产品推荐

