• Python Logging


    Python Standard module : Logging

    Python的日志模块很像 Apache的 Log4j, 使用起来也很方便

    可以通过 logging.basicConfig 在代码中配置,也可以通过 logging.config.fileConfig 在文件中配置
    ,不过该文件使用的是configparser,因此配置文件为ini格式,如

    
    [loggers]
    keys=root, apiev
    
    [handlers]
    keys=rollfile, stdout
    
    [formatters]
    keys=simple
    
    
    [formatter_simple]
    format=%(asctime)s %(name)s [%(levelname)s] %(message)s
    datefmt= %Y-%m-%d %H:%M:%S
    
    
    [handler_rollfile]
    class=handlers.RotatingFileHandler
    formatter=simple
    args=('logs/log.log', 'a', 1048576)
    
    [handler_stdout]
    class=StreamHandler
    formatter=simple
    args = (sys.stdout,)
    
    # Levels : DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET
    
    [logger_root]
    level=DEBUG
    handlers=rollfile, stdout
    
    [logger_apiev]
    level=WARNING
    handlers=rollfile, stdout
    qualname=api.ev
    

    所有的 logger 必须指定 handlers,否则会报KeyError错误,而 默认的Root Logger还必须要指定level
    每个handler必须要有class和args。另外,还可以使用 Yaml格式的配置文件,这样Python解析该文件后得到一个Dict,
    从而使用logging.config.dictConfig来配置,不过yaml解析不是Python的标准模块,
    需要先安装PyYamlPySyck

    使用后的感想,每个logger都需要指定handler,而handler可以指定formatter,
    而且logger中所使用的handler必须在handlers的keys中。因此个人认为,
    没有必要再设置formatters和handlers这两个section,反倒是 减少了 配置文件修改的灵活性。
    要做到这一点,也很容易,只需要修改文件Lib/logging/config.py中的2个地方几个:

    • 函数_create_formatters,直接获取所有的sections,然后 过滤得到以formatter_为前缀的section
    • 函数_install_handlers,同理。

    从优化的角度,应该是先从loggers中获取所有的Logger, 然后从这些Logger中获取所有的handlers, 再从handlers中获取所有的formatters。

  • 相关阅读:
    linux seqlock 锁
    linux 位操作
    linux 原子变量
    linux 读者/写者自旋锁
    linux自旋锁函数
    linux 自旋锁 API 简介
    linux Completions 机制
    linux 读者/写者旗标
    linux 在 scull 中使用旗标
    Linux 旗标实现
  • 原文地址:https://www.cnblogs.com/i2u9/p/pylogging.html
Copyright © 2020-2023  润新知