有没有办法通过配置文件设置Python日志格式化器以Unix时间戳记录时间?
我正在为十几个Python组件写一个中央的logging
配置文件,我需要一个特定的日志记录器来以UNIX时间格式记录时间(可以是毫秒,也可以是带小数的秒,两个都可以)。
有没有办法在配置文件中设置一个格式化器,让%(asctime)s
以那种方式输出?我想避免在多个独立的Python脚本中修改Formatter实例,而且后期处理日志文件也不太现实。
相关链接:Python日志:覆盖日志时间
3 个回答
3
LogRecord对象有一个属性叫做created
,这个属性是用来生成asctime
的,而且它的格式已经是你想要的(带小数的秒数)。所以,最简单的解决办法就是把格式字符串中所有的%(asctime)s
替换成%(created)f
:
[formatter_generic]
format = %(created)f %(levelname)-5.5s [%(name)s] %(message)s
4
我刚刚找到了解决方案:
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()
6
只需添加
datefmt = %s
到你对应的格式化器配置部分或格式化器构造函数调用中,例如:
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %s
另请参见 logging.Formatter
构造函数和 strftime(3)。