Python 没有时间戳模块名称的 absl 日志记录
Python absl logging without timestamp module name
我想知道是否可以只在 absl python 中记录 msg 字符串,而没有时间戳和模块名称。
例子
I0108 23:40:57.153055 140614090106688 extractor.py:79] processing file: dfcsdf
I0108 23:40:57.162382 140614090106688 extractor.py:72] ['/topic/fdfgd', dfgsdf']
I0108 23:40:57.162861 140614090106688 extractor.py:79] processing file: f456546fd
I0108 23:40:57.171764 140614090106688 extractor.py:72] ['/topic/1', '/topic/2', '/topic/3']
是否有配置仅记录如下消息
processing file: dfcsdf
['/topic/fdfgd', dfgsdf']
processing file: f456546fd
['/topic/1', '/topic/2', '/topic/3']
我知道我可以用控制台打印替换日志记录或编写自定义记录器,我想知道在 absl 日志记录中是否可行?
将格式化程序设置为 None
您可以将格式化程序设置为 None
。它可能看起来有点棘手,因为它没有很好的记录(我必须阅读 source code 以确保这是正确的),但以下工作:
from absl import app
from absl import logging
def main(argv):
logging.get_absl_handler().use_absl_log_file('log', "./FolderName")
logging.get_absl_handler().setFormatter(None)
logging.info('Info log')
logging.warning('Warning log')
if __name__ == '__main__':
app.run(main)
将格式化程序设置为 None
后,我的日志文件如下所示:
Info log
Warning log
自定义格式化程序
也就是说,实现自定义格式化程序并不难,而且我认为它更优雅,而且它允许您自定义输出。您只需要重写 format
函数:
from absl import app
from absl import logging
from absl.logging import PythonFormatter
class CustomPythonFormatter(PythonFormatter):
def format(self, record):
return super(PythonFormatter, self).format(record)
def main(argv):
logging.get_absl_handler().use_absl_log_file('log', "./Folder")
logging.get_absl_handler().setFormatter(CustomPythonFormatter())
logging.info('Info log')
logging.warning('Warning log')
if __name__ == '__main__':
app.run(main)
这给了我与以前相同的结果:
Info log
Warning log
我想知道是否可以只在 absl python 中记录 msg 字符串,而没有时间戳和模块名称。 例子
I0108 23:40:57.153055 140614090106688 extractor.py:79] processing file: dfcsdf
I0108 23:40:57.162382 140614090106688 extractor.py:72] ['/topic/fdfgd', dfgsdf']
I0108 23:40:57.162861 140614090106688 extractor.py:79] processing file: f456546fd
I0108 23:40:57.171764 140614090106688 extractor.py:72] ['/topic/1', '/topic/2', '/topic/3']
是否有配置仅记录如下消息
processing file: dfcsdf
['/topic/fdfgd', dfgsdf']
processing file: f456546fd
['/topic/1', '/topic/2', '/topic/3']
我知道我可以用控制台打印替换日志记录或编写自定义记录器,我想知道在 absl 日志记录中是否可行?
将格式化程序设置为 None
您可以将格式化程序设置为 None
。它可能看起来有点棘手,因为它没有很好的记录(我必须阅读 source code 以确保这是正确的),但以下工作:
from absl import app
from absl import logging
def main(argv):
logging.get_absl_handler().use_absl_log_file('log', "./FolderName")
logging.get_absl_handler().setFormatter(None)
logging.info('Info log')
logging.warning('Warning log')
if __name__ == '__main__':
app.run(main)
将格式化程序设置为 None
后,我的日志文件如下所示:
Info log
Warning log
自定义格式化程序
也就是说,实现自定义格式化程序并不难,而且我认为它更优雅,而且它允许您自定义输出。您只需要重写 format
函数:
from absl import app
from absl import logging
from absl.logging import PythonFormatter
class CustomPythonFormatter(PythonFormatter):
def format(self, record):
return super(PythonFormatter, self).format(record)
def main(argv):
logging.get_absl_handler().use_absl_log_file('log', "./Folder")
logging.get_absl_handler().setFormatter(CustomPythonFormatter())
logging.info('Info log')
logging.warning('Warning log')
if __name__ == '__main__':
app.run(main)
这给了我与以前相同的结果:
Info log
Warning log