zoukankan      html  css  js  c++  java
  • python高效配置-原生logging配置 适用于任何框架

    python 有自带logging 非常强大,网上也查了很多自配置的logger可以说体验不太好,一旦有import问题,日志重复打印什么的,各种各样的问题,下面记录一种可以适用于任何框架的logging,这个不是自创的,不记得是哪里查到的了。

    • logg_config.py配置文件
    import logging
    
    logging_config = dict(
        version=1,
        formatters={
            'simple': {'format': '%(asctime)s %(levelname)s {path: %(pathname)s Line_No: %(lineno)d} %(message)s'}
        },
        handlers={
            'default_handlers': {'class': 'logging.handlers.RotatingFileHandler',
                                 'filename': './logfile/logger.log',
                                 'maxBytes': 1024 * 1024 * 20,
                                 'backupCount': 50,
                                 'level': 'WARNING',
                                 'formatter': 'simple',
                                 'encoding': 'utf8'}
        },
    
        root={
            'handlers': ['default_handlers'],
            'level': logging.WARNING,
        },
    )
    
    • 写在配置文件里面,用于在程序最初启动的时候,加载一遍,全局通用。
    from logging.config import dictConfig
    import logging_config
    dictConfig(logging_config.logging_config)
    
    • 无论在哪个文件使用的正确打开方式
    import logging
    loger = logging.getLogger("default_handlers")
    loger.info("我要打印日志")
    

    工作中正在使用的通用本地日志记录

    -- log_config.py
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # author:SunXiuWen
    # datetime:2019/8/22 0022 9:39
    import os
    import platform
    
    BASEDIR = os.path.dirname(
        os.path.dirname(
            os.path.dirname(
                os.path.abspath(__file__))))
    # 本地项目日志路径
    CURRENT_LOG_PATH = os.path.join(BASEDIR, 'log')
    
    PREFIX = CURRENT_LOG_PATH if platform.system(
    ) == 'Windows' else '/opt/logs/python_apps_logs/Business_lsms_sync_service'
    
    # 判断目录是否存在,若不存在则创建
    if not os.path.exists(PREFIX):
        os.makedirs(PREFIX)
    
    # 日志文件路径
    LOG_PATH_DEBUG = r'%sdebug.log' % PREFIX if platform.system(
    ) == 'Windows' else '%s/debug.%s.log' % (PREFIX, os.getpid())
    LOG_PATH_INFO = r'%sinfo.log' % PREFIX if platform.system(
    ) == 'Windows' else '%s/info.%s.log' % (PREFIX, os.getpid())
    LOG_PATH_WARN = r'%swarn.log' % PREFIX if platform.system(
    ) == 'Windows' else '%s/warn.%s.log' % (PREFIX, os.getpid())
    LOG_PATH_ERROR = r'%serror.log' % PREFIX if platform.system(
    ) == 'Windows' else '%s/error.%s.log' % (PREFIX, os.getpid())
    
    
    # 日志配置
    LOGGING_CONFIG = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            'standard': {
                'format': '[%(asctime)s] %(levelname)s::(%(process)d %(thread)d)::%(module)s[line:%(lineno)d] - %(message)s'
            },
        },
        'handlers': {
            'error': {
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'level': 'ERROR',
                'formatter': 'standard',
                'filename': LOG_PATH_ERROR + '_file',
                'when': 'H',
                'interval': 1
            },
            'warn': {
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'level': 'WARN',
                'formatter': 'standard',
                'filename': LOG_PATH_WARN + '_file',
                'when': 'H',
                'interval': 1
            },
            'info': {
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'level': 'INFO',
                'formatter': 'standard',
                'filename': LOG_PATH_INFO + '_file',
                'when': 'H',
                'interval': 1
            },
            'debug': {
                'class': 'logging.handlers.TimedRotatingFileHandler',
                'level': 'DEBUG',
                'formatter': 'standard',
                'filename': LOG_PATH_DEBUG + '_file',
                'when': 'H',
                'interval': 1
            }
        },
        'loggers': {
            'default': {
                'handlers': ['debug', 'info', 'warn', 'error'],
                'level': 'DEBUG',
                'propagate': True
            }
        }
    }
    

    总的config文件中配置

    from configs.log_conf.log_config import LOGGING_CONFIG
    # 本地日志管理配置
        CURRENT_CONFIG['LOGGING_CONFIG'] = LOGGING_CONFIG
    

    各py文件中应用

    import config
    
    logging.config.dictConfig(config.LOGGING_CONFIG)
    logger = logging.getLogger('default')
    
    def test():
        logger.debug("xxx")
        pass
    
  • 相关阅读:
    MVC梳理与总结
    《岛上书店》
    PIL简单图片处理(上)
    Day 3---快捷键
    Day 2---控制快捷键
    Day 1--快捷键
    每天学点Emacs
    swift写ios mvc的小demo
    hexo博客部署到github无法上传的问题
    Django Web开发【7】 投票与评论
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/11444235.html
Copyright © 2011-2022 走看看