我正在尝试创建一个日志系统,将特定日志排序为类似于logs/<NAME HERE>/<LEVEL>.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"]
}
}
通过上面显示的配置,我得到ValueError: Unable to configure handler u'error_file_handler': [Errno 2] No such file or directory: u'.../logs/%(name)s/errors.log'
。那么,我采用的方法不支持变量名作为文件名的一部分?我是否仅限于以编程方式创建日志记录对象,或者有没有办法在Python的默认日志记录库中执行此操作?我知道我可以为每个单独的类创建特定的记录器,但我真的很感激不要自己为每个案例手动写出每个记录器并将记录配置保持为独特的情况。如果可以的话,我也想使用配置文件。
答案 0 :(得分:0)
日志记录配置系统允许您指定要创建的处理程序,但它不是为了允许您为处理程序创建模板而设计的,这似乎是您想要的。< / p>
我不知道“name”是否指的是记录器名称,并且考虑到日志记录级别,记录器和处理程序的工作方式,您的方案似乎没有多大意义。即使您使用常量名称作为日志文件(让您解决当前问题),您在ERROR
中也会同时收到INFO
和info.log
级别的消息(以及{{1}消息)。
根据我的经验,我不建议尝试为每个记录器和每个级别设置单独的日志文件 - 这不是一个特别有用的操作模式。