提供正常日志输出格式的小python库

logsna的Python项目详细描述


 _    ___   ___ ___ _  _   _
| |  / _ \ / __/ __| \| | /_\
| |_| (_) | (_ \__ \ .` |/ _ \
|____\___/ \___|___/_|\_/_/ \_\

logsna是一个小的python库,它提供一个正常的日志输出 格式。

http://logsna.readthedocs.org

安装

$ [sudo] pip install logsna

或者git master分支的出血边缘版本:

$ [sudo] pip install git+https://github.com/rspivak/logsna.git#egg=logsna

如何使用

logsna提供一个自定义格式化程序类logsna.formatter可用于日志配置文件:

# sanefmt.py
import logging
import logging.config
from StringIO import StringIO

CONFIG = """\
[loggers]
keys=root

[handlers]
keys=console

[handler_console]
class=logging.StreamHandler
args=(sys.stderr,)
formatter=sane

[formatters]
keys=sane

[logger_root]
level=DEBUG
handlers=console

# Our custom formatter class
[formatter_sane]
class=logsna.Formatter
"""

config = StringIO(CONFIG)
logging.config.fileConfig(config)

log = logging.getLogger('mylogger.component1')

log.debug('debug message')
log.info('info message')
log.warning('warning message')
log.critical('critical message')
try:
    1 / 0
except:
    log.exception('Houston we have a problem')

这是如何在代码中直接使用它的:

import logging

import logsna

# create logger
log = logging.getLogger('mylogger.component1')
log.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create an instance of the sane formatter
formatter = logsna.Formatter()

# add our formatter to the console handler
ch.setFormatter(formatter)

# add the console handler to the logger
log.addHandler(ch)

log.debug('debug message')
log.info('info message')
log.warning('warning message')
log.critical('critical message')
try:
    1 / 0
except:
    log.exception('Houston we have a problem')

日志格式

以下是上述程序的输出:

DEBUG    [2012-05-21 01:59:23,686] mylogger.component1: debug message
INFO     [2012-05-21 01:59:23,686] mylogger.component1: info message
WARNING  [2012-05-21 01:59:23,686] mylogger.component1: warning message
CRITICAL [2012-05-21 01:59:23,686] mylogger.component1: critical message
ERROR    [2012-05-21 01:59:23,686] mylogger.component1: Houston we have a problem
! Traceback (most recent call last):
!   File "/home/alienoid/python/sanefmt.py", line 67, in <module>
!     1 / 0
! ZeroDivisionError: integer division or modulo by zero

日志格式的目标

  1. 尽可能使人可读
  2. 使其易于与标准unix实用程序一起使用tailgrep 以帮助快速找出事情恶化的原因

日志格式注释

  1. 所有时间戳都采用iso8601utc格式

  2. 对特定级别的邮件进行grep

    $ tail -f sanefmt.log | grep '^INFO'
    
  3. 对来自特定记录器的消息进行grep

    $ tail -f sanefmt.log | grep 'component1:'
    
  4. 使用相应的日志消息提取完整的异常回溯

    $ tail -f sanefmt.log | grep -B 1 '^\!'
    

    The output of the above command will look like this

    ERROR    [2012-05-21 01:59:23,686] mylogger.component1: Houston we have a problem
    ! Traceback (most recent call last):
    !   File "fmttest.py", line 72, in <module>
    !     1 / 0
    ! ZeroDivisionError: integer division or modulo by zero
    

增强日志格式输出

以下是logsna格式化程序使用的格式字符串:

'%(levelname)-8s [%(asctime)s] %(name)s: %(message)s'

您可以在配置文件中使用格式显式指定它 指令

# Our custom formatter class
[formatter_sane]
format=%(levelname)-8s [%(asctime)s] %(name)s: %(message)s
class=logsna.Formatter

您还可以通过添加自定义的 如果你需要的话。 有关一组预定义的日志记录属性,请参见here

许可证

版权所有(c)2012 Ruslan Spivak

根据麻省理工学院许可证出版,请参见许可证

变更历史

1.2(2012-10-02)

  • python 2.6.x兼容性

1.1(2012-05-21)

1.0(2012-05-21)

  • 公开发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么程序显示空结果?   java应用程序在测试设备上调试时工作正常,但在发布版apk中没有,它没有获得post。来自firebase的类变量   java Android:从主活动按钮确定在listview中选中哪个复选框   在Spring中添加@OneToOne注释时启动ApplicationContext时发生java错误   用JAVA Android实现矩阵计算的最快方法   SpringJava语义有没有更好的编写方法?   java从hashmap中减去两个值后返回最小差值的键?   Java中的静态初始化顺序:Netty 4.0.7的例外   java如何检查用户输入是否为字符串   循环Java计数单词索引   java如何使用以下代码将视频流传输到Android异步Http服务器?   java如何在jtable的所有行中循环   java如何使用maven将unicode插入mysql   java使用安卓加速远程数据检索   java试图模拟麦克风(javax.sound.sampled)   swing SwingWorker从不归还任何东西?(爪哇)   首次在Android Studio上未加载java LibGDX文件   java如何在多个Mysql服务器上设置限制和偏移?   如何防止从java连接到mongodb时登录控制台?