Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CherryPy不遵守所需的日志记录格式_Python_Logging_Cherrypy - Fatal编程技术网

Python 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

我正在尝试配置CherryPy的日志格式。CherryPy在python中使用日志模块,因此这很容易做到,但是CherryPy似乎仍然将自己的时间戳插入日志的实际“消息”中如何让CherryPy不在“消息”中插入自己的时间戳

下面是一个小的不完整的代码示例,它演示了我正在尝试做的事情和不需要的输出

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)