我正在为十几个Python组件编写一个中央logging
配置文件,我需要一个特定的记录器来记录UNIX时间格式的时间(毫秒或秒的分数,两者都很好) )。
有没有办法在配置文件中配置格式化程序,输出%(asctime)s
这样的?我试图避免在多个独立的Python脚本中修补Formatter实例,并且对后处理日志文件不可行。
答案 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