python';s旋转文件处理程序
我试图创建一个日志系统,将特定日志排序到类似于:python';s旋转文件处理程序,python,logging,Python,Logging,我试图创建一个日志系统,将特定日志排序到类似于:logs//.log的目录模式中。到目前为止,它还没有成功。我想看看是否可以在日志配置文件中实现此功能,而不是通过编程为每个案例创建一个 { "version": 1, "disable_existing_loggers": false, "formatters": { "simple": { "format": "%(asctime)s - %(name)s <%(leveln
logs//.log
的目录模式中。到目前为止,它还没有成功。我想看看是否可以在日志配置文件中实现此功能,而不是通过编程为每个案例创建一个
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"simple": {
"format": "%(asctime)s - %(name)s <%(levelname)s>: %(message)s"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "simple",
"filename": "logs/%(name)s/info.log",
"maxBytes": "10485760",
"backupCount": "20",
"encoding": "utf8"
},
"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "simple",
"filename": "logs/%(name)s/errors.log",
"maxBytes": "10485760",
"backupCount": "20",
"encoding": "utf8"
}
},
"loggers": {
"my_module": {
"level": "ERROR",
"handlers": ["console"],
"propagate": "no"
}
},
"root": {
"level": "INFO",
"handlers": ["console", "info_file_handler", "error_file_handler"]
}
}
{
“版本”:1,
“禁用现有日志记录器”:false,
“格式化程序”:{
“简单”:{
“格式”:“%(asctime)s-%(名称)s:%(消息)s”
}
},
“处理程序”:{
“控制台”:{
“类”:“logging.StreamHandler”,
“级别”:“调试”,
“格式化程序”:“简单”,
“流”:ext://sys.stdout"
},
“信息文件处理程序”:{
“类”:“logging.handlers.RotatingFileHandler”,
“级别”:“信息”,
“格式化程序”:“简单”,
“文件名”:“logs/%(name)s/info.log”,
“maxBytes”:“10485760”,
“备份数量”:“20”,
“编码”:“utf8”
},
“错误文件处理程序”:{
“类”:“logging.handlers.RotatingFileHandler”,
“级别”:“错误”,
“格式化程序”:“简单”,
“文件名”:“logs/%(name)s/errors.log”,
“maxBytes”:“10485760”,
“备份数量”:“20”,
“编码”:“utf8”
}
},
“伐木工人”:{
“我的单元”:{
“级别”:“错误”,
“处理程序”:[“控制台”],
“传播”:“否”
}
},
“根”:{
“级别”:“信息”,
“处理程序”:[“控制台”、“信息文件处理程序”、“错误文件处理程序”]
}
}
使用上面显示的配置,我得到
ValueError:无法配置处理程序u'error\u file\u handler':[Errno 2]没有这样的文件或目录:u'…/logs/%(name)s/errors.log'
。那么,我采用的方法不支持将变量名作为文件名的一部分?我是否仅限于以编程方式创建日志对象,或者在Python的默认日志库中是否有这样做的方法?我知道我可以为每个单独的类创建特定的记录器,但我真的很感激不需要自己为每个案例手动写出每个记录器,并将日志配置保持为唯一的案例。如果可以的话,我也想使用配置文件。日志配置系统允许您指定要创建的处理程序,但它的设计不允许您为处理程序创建模板,这似乎是您想要的
我不知道“name”是否指的是记录器名称,考虑到日志记录级别、记录器和处理程序的工作方式,您的方案似乎没有多大意义。即使您为日志文件使用了一个常量名称(帮助您解决当前的问题),您也会在INFO.log
中同时出现错误和INFO
级别的消息(以及警告
消息)
我不建议尝试为每个记录器和每个级别设置单独的日志文件-根据我的经验,这不是一种特别有用的操作模式