在python中logging二次封装 Formatter里的filename 不正确
时间: 2024-03-20 13:40:39 浏览: 151
好的,我理解了你的问题。你的意思是你在进行 logging 的二次封装时,发现在 Formatter 中设置的 `filename` 参数输出的文件名不正确,对吗?
如果是这样,可能是因为在 Formatter 中设置的 `filename` 参数也是默认使用 `__file__` 获得的当前模块的文件名,而不是你想要的被日志记录的文件名。
解决这个问题的方法是,你可以在自定义的 logging 函数中,手动添加一个 `filename` 参数,并将其传递给 Formatter,而不是使用默认值。例如:
```python
import logging
def custom_logger(filename):
logger = logging.getLogger(filename)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', '%Y-%m-%d %H:%M:%S')
file_handler = logging.FileHandler(filename + '.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
logger = custom_logger('my_module')
logger.debug('This is a debug message')
```
在上面的代码中,我们在自定义的 logging 函数中添加了一个 `filename` 参数,并将其传递给 Formatter。Formatter 使用了 `% (asctime) s` 来添加记录时间,`%(name)s` 来添加 logger 名称,`%(levelname)s` 来添加日志级别,`%(message)s` 来添加日志消息。`%Y-%m-%d %H:%M:%S` 用于设置记录时间的格式。
这样,你就可以在调用 logging 函数时,指定要记录日志的文件名了。
希望这能帮助到你!
阅读全文