有没有办法通过配置文件配置Python日志格式化程序以将时间记录为Unix时间戳?

时间:2012-02-13 19:54:57

标签: python logging config-files

我正在为十几个Python组件编写一个中央logging配置文件,我需要一个特定的记录器来记录UNIX时间格式的时间(毫秒或秒的分数,两者都很好) )。

有没有办法在配置文件中配置格式化程序,输出%(asctime)s这样的?我试图避免在多个独立的Python脚本中修补Formatter实例,并且对后处理日志文件不可行。

相关:Python logging: override log time

3 个答案:

答案 0 :(得分:4)

添加

datefmt = %s

到相应的格式化程序配置节或格式化程序构造函数调用,例如:

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %s

另请参阅logging.Formatter构造函数和strftime(3)

答案 1 :(得分:2)

我刚刚找到了以下解决方案:

import logging

class UnixTimeStampFormatter(logging.Formatter):
    def formatTime(self, record, datefmt = None):
        return "{0:.6f}".format(record.created)

def main():
    logChannel = logging.StreamHandler()
    logChannel.setFormatter(UnixTimeStampFormatter("%(asctime)s %(levelname)-5.5s [%(name)s] %(message)s"))
    logging.getLogger().setLevel(logging.DEBUG)
    logging.getLogger().addHandler(logChannel)
    logging.debug('hello');

if __name__ == "__main__":
    main()

答案 2 :(得分:0)

LogRecord object具有属性created,该属性用作asctime的基础,并且已经具有您想要的格式(带分数的秒)。因此,最简单的解决方案可能是将格式字符串中所有出现的%(asctime)s替换为%(created)f

[formatter_generic]
format = %(created)f %(levelname)-5.5s [%(name)s] %(message)s