python logging 开局

python logging 开局

 

import logging
from configparser import ConfigParser
import os
def set_log_level(file_config_path="",file_log_path="",file_log_level="INFO",console_log_level="INFO",simple_format=True):
    #log_level will be usefull while file_config_path and file_log_path both are empty string
    level_dict={
    'CRITICAL' : logging.CRITICAL,
    'FATAL' : logging.FATAL,
    'ERROR' : logging.ERROR,
    'WARNING' : logging.WARNING,
    'WARN' : logging.WARN,
    'INFO' : logging.INFO,
    'DEBUG' : logging.DEBUG,
    'NOTSET' : logging.NOTSET
    }

    '''
    ;配置文件样式 如下
    ;日志等级:
    ;FATAL:致命错误
    ;CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用
    ;ERROR:发生错误时,如IO操作失败或者连接问题
    ;WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误
    ;INFO:处理请求或者状态变化等日常事务
    ;DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
    ;CRITICAL = 50
    ;FATAL = CRITICAL
    ;ERROR = 40
    ;WARNING = 30
    ;WARN = WARNING
    ;INFO = 20
    ;DEBUG = 10
    ;NOTSET = 0
    [default]
    fileloglevel=INFO
    consoleloglevel=WARN
    '''

    # 如果存在配置文件,level 从文件中读取
    if file_config_path != "":
        myConf=ConfigParser()
        myConf.read(file_config_path,encoding='utf-8')

        fileloglevel=myConf.get("default","fileloglevel")
        consoleloglevel=myConf.get("default","consoleloglevel")

    #如果不存在配置文件,level从文件的入参读取
    else:
        fileloglevel = file_log_level
        consoleloglevel = console_log_level

    #logger默认配置
    logger = logging.getLogger(__name__)
    logger.setLevel(level=logging.DEBUG)

    #日志是否要打印时间,level,调用者等信息
    if not simple_format :
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    else:
        formatter = logging.Formatter('%(message)s')

    #如果要记录日志到文件中,(入参有包含文件日志路径)
    if file_log_path !="":
        filehandler = logging.FileHandler(file_log_path, mode="w",encoding='UTF-8')
        filehandler.setLevel(level_dict[fileloglevel])
        filehandler.setFormatter(formatter)
        logger.addHandler(filehandler)

    #控制台日志配置
    console_handler = logging.StreamHandler()
    console_handler.setLevel(level_dict[consoleloglevel])
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)

    return logger
if __name__ == '__main__':
    logger = set_log_level(file_log_path="test.log")
 
    logger.debug("debug info")
    logger.info("this is a info")
    logger.warning("there is a warning")
    logger.error("error!!!!")
    logger.fatal("fatal!!!!!")
 
    os.startfile('test.log')

  

 

posted @ 2021-02-20 09:58  link2_2020  阅读(29)  评论(0)    收藏  举报