zoukankan      html  css  js  c++  java
  • python logging 配置

    python logging 配置

    在python中,logging由logger,handler,filter,formater四个部分组成,logger是提供我们记录日志的方法;handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;filter是给用户提供更加细粒度的控制日志的输出内容;formater用户格式化输出日志的信息。
    python中配置logging有三种方式
    第一种:基础配置,logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO)。
    第二种:使用配置文件的方式配置logging,使用fileConfig(filename,defaults=None,disable_existing_loggers=Ture )函数来读取配置文件。
    第三种:使用一个字典方式来写配置信息,然后使用dictConfig(dict,defaults=None, disable_existing_loggers=Ture )函数来瓦按成logging的配置.


    在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
    filename: 用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
    filemode: 文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    format: 指定handler使用的日志显示格式。
    datefmt: 指定日期时间格式。
    level: 设置rootlogger(后边会讲解具体概念)的日志级别
    stream: 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
    若同时列出了filename和stream两个参数,则stream参数会被忽略。

    format参数中可能用到的格式化串:
    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funcName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d 线程ID。可能没有
    %(threadName)s 线程名。可能没有
    %(process)d 进程ID。可能没有
    %(message)s 用户输出的消息

    日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
    propagete参数 :propagete=0,表示输出日志,但消息不传递;propagate=1是输出日志,同时消息往更高级别的地方传递。root为最高级别。

    示例:
    logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO);

    #coding=utf-8
    import os
    import datetime
    import logging
    import logging.config
    
    def main():
        """"""
        BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        LOG_DIR = os.path.join(BASE_DIR, "logs")
        if not os.path.exists(LOG_DIR):
            os.makedirs(LOG_DIR)  # 创建路径
    
        LOG_FILE = datetime.datetime.now().strftime("%Y-%m-%d") + ".log"
    
        LOGGING = {
            "version": 1,
            "disable_existing_loggers": False,
            "formatters": {
                "simple": {
                    'format': '%(asctime)s [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
                },
                'standard': {
                    'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
                },
            },
    
            "handlers": {
                "console": {
                    "class": "logging.StreamHandler",
                    "level": "DEBUG",
                    "formatter": "simple",
                    "stream": "ext://sys.stdout"
                },
    
                "default": {
                    "class": "logging.handlers.RotatingFileHandler",
                    "level": "INFO",
                    "formatter": "simple",
                    "filename": os.path.join(LOG_DIR, LOG_FILE),
                    'mode': 'w+',
                    "maxBytes": 1024*1024*5,  # 5 MB
                    "backupCount": 20,
                    "encoding": "utf8"
                },
            },
    
            # "loggers": {
            #     "app_name": {
            #         "level": "INFO",
            #         "handlers": ["console"],
            #         "propagate": "no"
            #     }
            # },
    
            "root": {
                'handlers': ['default'],
                'level': "INFO",
                'propagate': False
            }
        }
    
        logging.config.dictConfig(LOGGING)
    
    
    def do_something():
        log = logging.getLogger(__file__)
        print "print A"
        log.info("log B")
    
    
    if __name__ == '__main__':
        main()
        do_something()

    日志配置相关文章:
    http://python.usyiyi.cn/python_278/library/logging.config.html
    http://my.oschina.net/leejun2005/blog/126713
    http://blog.chinaunix.net/uid-26000296-id-4372063.html

    django logging 配置

    https://segmentfault.com/a/1190000003752981

  • 相关阅读:
    协程,纤程(Fiber),或者绿色线程(GreenThread)
    好用的 Chrome 插件
    内存泄露
    Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录
    ES6-类(Class)
    规范-Git打标签与版本控制
    必会必知git
    Ubuntu 16.04安装CrossOver容器来安装QQ(终极解决办法,亲测有效)
    Ubuntu 16.04安装UML工具StarUML 2
    Ubuntu 16.04升级4.7.0内核后导致Compiz奔溃,问题:compiz[4852]: segfault at 48 ip 00007f88cae087f0 sp 00007ffce354c268 error 4 in libscale.so
  • 原文地址:https://www.cnblogs.com/weiok/p/5592448.html
Copyright © 2011-2022 走看看