Python CherryPy不遵守所需的日志记录格式
我正在尝试配置CherryPy的日志格式。CherryPy在python中使用日志模块,因此这很容易做到,但是CherryPy似乎仍然将自己的时间戳插入日志的实际“消息”中如何让CherryPy不在“消息”中插入自己的时间戳 下面是一个小的不完整的代码示例,它演示了我正在尝试做的事情和不需要的输出Python CherryPy不遵守所需的日志记录格式,python,logging,cherrypy,Python,Logging,Cherrypy,我正在尝试配置CherryPy的日志格式。CherryPy在python中使用日志模块,因此这很容易做到,但是CherryPy似乎仍然将自己的时间戳插入日志的实际“消息”中如何让CherryPy不在“消息”中插入自己的时间戳 下面是一个小的不完整的代码示例,它演示了我正在尝试做的事情和不需要的输出 main.py ... cherrypy_logger = logging.getlogger('cherrypy.error') cherrypy_logger.handlers = [] # re
main.py
...
cherrypy_logger = logging.getlogger('cherrypy.error')
cherrypy_logger.handlers = [] # remove any previous handlers the logger had
new_handler = logging.streamHandler()
new_formatter = logging.formatter('blah blah blah ....: %(message)s')
new_handler.setformatter(new_formatter)
cherrypy_logger.addhandler(new_handler)
....
然后,当CherryPy lib/module记录一些内容时,我得到以下结果:
“废话废话…:[Jan/17/07 23:59:59]发动机已启动…”
我可能做错了什么,但看起来像是CheeryPy在提交给日志记录器的字符串中插入了时间戳,而不管开发人员希望如何在日志中显示时间。我怎样才能解决这个问题
注意:上面的代码来自内存,是理解我的观点的最低要求(希望如此)。它不会编译/运行。
提前谢谢。回答了我自己的问题: 事实证明,CherryPy实际上是在“消息”中插入了一个时间戳 以下代码可以在_cplogging.py中找到
self.error\u log.log(严重性),.join((self.time(),context,msg)),exc\u info=exc\u info)
IMHO是向日志中插入时间戳的一种糟糕的方法,因为更改日志格式的屈折性。现在我把这句话改成这样:
self.error\u log.log(严重性),.join((上下文,消息)),exc\u info=exc\u info)
这为我解决了这个问题,但是其他代码需要更多的调整,使其成为一个合适的补丁,我将看看我是否可以这样做并提交
另外,CherryPy访问日志也有类似的问题
无论如何,希望这能帮助其他人 在不更改源代码的情况下对CherryPy日志进行一些小更改的另一种方法是使用方法或属性黑客,例如: 要修改datetime fomatter,可以更改time()方法 要修改access\u日志的字符串格式化程序,可以使用:
cherrypy._cplogging.LogManager.access_log_format = (
'{t} MYLOG {h} "{r}" {s} {b} "{f}" "{a}"'
if six.PY3 else
'%(t)s MYLOG %(h)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
)
最后,您可以使用以下方法修改错误日志的字符串格式化程序:
new_formatter = logging.Formatter("%(asctime)s MYLOG %(message)s")
for h in cherrypy.log.error_log.handlers:
h.setFormatter(new_formatter)
希望对你有帮助 迟做总比不做好。。。。谢谢你的帮助。为了将来的记录,这个把戏用一点鞋钉就足够了。
new_formatter = logging.Formatter("%(asctime)s MYLOG %(message)s")
for h in cherrypy.log.error_log.handlers:
h.setFormatter(new_formatter)