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'%s\debug.log' % PREFIX if platform.system(
) == 'Windows' else '%s/debug.%s.log' % (PREFIX, os.getpid())
LOG_PATH_INFO = r'%s\info.log' % PREFIX if platform.system(
) == 'Windows' else '%s/info.%s.log' % (PREFIX, os.getpid())
LOG_PATH_WARN = r'%s\warn.log' % PREFIX if platform.system(
) == 'Windows' else '%s/warn.%s.log' % (PREFIX, os.getpid())
LOG_PATH_ERROR = r'%s\error.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
posted @ 2019-09-01 23:23  Alive_2020  阅读(643)  评论(0编辑  收藏  举报