我想使用日志记录模块在 Python 中的每次循环迭代中生成一个新的日志文件。我正在 for 循环中分析数据,其中循环的每次迭代都包含有关新对象的信息。我想为每个对象生成一个日志文件。
我查看了日志记录模块的文档,可以按时间间隔或在日志文件填满时更改日志文件,但我看不到如何以新名称迭代生成新日志文件。我提前知道循环中有多少对象。
我想象的伪代码是:
import logging
for target in targets:
logfile_name = f"{target}.log"
logging.basicConfig(format='%(asctime)s - %(levelname)s : %(message)s',
datefmt='%Y-%m/%dT%H:%M:%S',
filename=logfile_name,
level=logging.DEBUG)
# analyse target infomation
logging.info('log target info...')
Run Code Online (Sandbox Code Playgroud)
但是,日志信息始终附加到目标 1 的第一个日志文件中。
有没有办法在每个循环开始时强制一个新的日志文件?
logging您需要使用记录器对象,而不是直接使用。仔细阅读此处的文档。
创建一个新的记录器对象作为循环中的第一条语句。下面是一个有效的解决方案。
import logging
import sys
def my_custom_logger(logger_name, level=logging.DEBUG):
"""
Method to return a custom logger with the given name and level
"""
logger = logging.getLogger(logger_name)
logger.setLevel(level)
format_string = ("%(asctime)s — %(name)s — %(levelname)s — %(funcName)s:"
"%(lineno)d — %(message)s")
log_format = logging.Formatter(format_string)
# Creating and adding the console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(log_format)
logger.addHandler(console_handler)
# Creating and adding the file handler
file_handler = logging.FileHandler(logger_name, mode='a')
file_handler.setFormatter(log_format)
logger.addHandler(file_handler)
return logger
if __name__ == "__main__":
for item in range(10):
logger = my_custom_logger(f"Logger{item}")
logger.debug(item)
Run Code Online (Sandbox Code Playgroud)
这会为每次迭代写入不同的日志文件。
| 归档时间: |
|
| 查看次数: |
5737 次 |
| 最近记录: |