• 0x02 Python logging模块利用配置加载logger


    logging模块利用配置加载logger

    logging.config模块提供了从配置加载创建logger等相关对象,并放入manager对象中进行缓存待用。所以记录下一般几种方式配置的范本模式,方便项目中copy直接修改使用。

    dict config references 官档关于logging配置字典说明

    方式一模板:logging.config.dictConfig(config_dict)

    config_dict 字典模板

        cfg = {
            'version': 1,
            'formatters': {
                'detailed': {
                    'class': 'logging.Formatter',
                    'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
                }
            },
            'handlers': {
                'console': {
                    'class': 'logging.StreamHandler',
                    'level': 'INFO',
                },
                'file': {
                    'class': 'logging.FileHandler',
                    'filename': 'mplog.log',
                    'mode': 'w',
                    'formatter': 'detailed',
                },
                'foofile': {
                    'class': 'logging.FileHandler',
                    'filename': 'mplog-foo.log',
                    'mode': 'w',
                    'formatter': 'detailed',
                },
                'errors': {
                    'class': 'logging.FileHandler',
                    'filename': 'mplog-errors.log',
                    'mode': 'w',
                    'level': 'ERROR',
                    'formatter': 'detailed',
                },
            },
            'loggers': {
                'foo': {
                    'handlers': ['foofile']
                }
            },
            'root': {
                'level': 'DEBUG',
                'handlers': ['console', 'file', 'errors']
            },
        }
    
    

    模板二:

    LOGGER_CONFIG_DICT = {
            'version': 1,
            'formatters': {
                'detailed_fmt': {
                    'class': 'logging.Formatter',
                    'format': '%(asctime)s %(created)s %(levelname)-6s %(name)-15s %(processName)s:%(threadName)s %(message)s'
                    #  human-readable  timestamp levelname logger_name  processname threadname  message
                },
                'simple_fmt': {
                    'class': 'logging.Formatter',
                    'format': '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'
                    #  human-readable  levelname logger_name message
                },
                'portal_fmt': {
                    'class': 'logging.Formatter',
                    # 'datefmt': '%Y-%m-%d %H:%M:%S,uuu',  # 实际默认格式就是这个
                    'format': '%(asctime)s %(levelname)-8s %(name)-15s  %(processName)-10s %(message)s'
                },
                'system_fmt': {
                    'class': 'logging.Formatter',
                    'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
                },
            },
            'handlers': {
                # 'console_hd': {
                #     'class': 'logging.StreamHandler',
                #     'level': 'INFO'
                # },
                'time_rotate_file_hd': {
                    'class': 'logging.handlers.TimedRotatingFileHandler',
                    'filename': './logs/selfservices1.log',
                    'when': 'M',
                    'interval': 5,
                    'backupCount': 100,
                    'formatter': 'simple_fmt'
                },
                'file_size_rotate_hd': {
                    'class': 'logging.handlers.RotatingFileHandler',
                    'filename': './logs/portal.log',
                    'mode': 'a',
                    'maxBytes': 1024 * 1024 * 5,
                    'backupCount': 50,
                    'formatter': 'portal_fmt'
                },
                'errors_hd': {
                    'class': 'logging.FileHandler',
                    'filename': './logs/errors.log',
                    'formatter': 'detailed_fmt',
                    'level': 'ERROR'  # 只会错误40及以上的日志
                },
                'system_hd': {
                    'class': 'logging.FileHandler',
                    'filename': './logs/system.log',
                    'formatter': 'simple_fmt'
                }
            },
            'loggers': {
                'selfservices': {
                    'level': 'INFO',
                    'handlers': ['file_size_rotate_hd', 'errors_hd']
                    # 'handlers': ['time_rotate_file_hd', 'file_size_rotate_hd', 'errors_hd']
                }
            },
            'root': {
                'level': 'DEBUG',
                'handlers': ['system_hd', 'errors_hd']
            },
        }
    
  • 相关阅读:
    const
    ImportError: No module named google.protobuf
    ImportError: No module named google.protobuf
    多线程同步与单线程异步对比
    多线程同步与单线程异步对比
    再谈select, iocp, epoll,kqueue及各种I/O复用机制
    再谈select, iocp, epoll,kqueue及各种I/O复用机制
    poj1180
    poj3254
    poj3321
  • 原文地址:https://www.cnblogs.com/ZJiQi/p/11557072.html
Copyright © 2020-2023  润新知