python 日志器

python 日志器

方式一(推荐使用):

import os
import logging.config
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
log_path_dir = os.path.join(PROJECT_DIR, 'output', 'logs')
if not os.path.exists(log_path_dir):
    os.makedirs(log_path_dir)

LOGGING_DICT = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已经存在的日志器
    'formatters': {  # 日志信息显示的格式
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(filename)s line:%(lineno)d %(message)s'
        }
    },
    'handlers': {  # 日志处理方法
        'console': {  # 向终端中输出日志
            'level': 'INFO',
            'filters': [],
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'debug': {  # 向文件中输出日志
                    'level': 'DEBUG',
                    'class': 'logging.handlers.RotatingFileHandler',
                    'filename': os.path.join(log_path_dir, "debug.log"),  # 日志文件的位置
                    'maxBytes': 50 * 1024 * 1024,
                    'backupCount': 100,
                    'formatter': 'verbose'
                },
        'info': {  # 向文件中输出日志
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_path_dir, "info.log"),  # 日志文件的位置
            'maxBytes': 50 * 1024 * 1024,
            'backupCount': 100,
            'formatter': 'verbose'
        },
        'error': {  # 向文件中输出日志
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_path_dir, "error.log"),  # 日志文件的位置
            'maxBytes': 50 * 1024 * 1024,
            'backupCount': 100,
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志器
        'info': {  # 定义了一个名为info的日志器
            'handlers': ['console', 'debug', 'info', 'error'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'DEBUG',  # 日志器接收的最低日志级别
        },
    }
}



logging.config.dictConfig(LOGGING_DICT)
logger = logging.getLogger('info')
if __name__ == '__main__':
    logger.info("信息%s" % "info")
    logger.error("error message")
    logger.debug("debug test message")

 

方式二:

import logging
from logging.handlers import RotatingFileHandler
import os
import logging.config
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
log_path_dir = os.path.join(PROJECT_DIR, 'output', 'logs')
if not os.path.exists(log_path_dir):
    os.makedirs(log_path_dir)
class Logger:
    def __init__(self):
        # 创建自己的日志收集器
        self.logger = logging.getLogger("logger")
        # 设置收集的日志等级,设置为DEBUG等级
        self.logger.setLevel("DEBUG")

         # 日志输出渠道
        # 创建一个日志输出渠道(输出到控制台),并且设置输出的日志等级为DEBUG以上
        self.stream_out = logging.StreamHandler()
        self.stream_out.setLevel("DEBUG")
        # 创构建一个日志输出渠道(输出到文件)

        self.error = RotatingFileHandler(filename="../output/error.log", maxBytes=1000 * 1024 * 1024, backupCount=8, encoding='utf8')
        self.error.setLevel("ERROR")  #设置输出的日志等级为ERROR以上
        self.debug = RotatingFileHandler(filename="../output/debug.log", maxBytes=100 * 1024 * 1024, backupCount=8, encoding='utf-8')
        self.debug.setLevel("DEBUG")  #设置输出的日志等级为DEBUG以上
        self.info = RotatingFileHandler(filename="../output/info.log", maxBytes=500 * 1024 * 1024, backupCount=8, encoding='utf-8')
        self.info.setLevel("INFO")  #设置输出的日志等级为INFO以上


        #将日志输出渠道添加到日志收集器中
        self.logger.addHandler(self.stream_out)
        self.logger.addHandler(self.error)
        self.logger.addHandler(self.debug)
        self.logger.addHandler(self.info)
        # 设置日志输出的格式
        # 可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
        # % (levelname)s: 打印日志级别名称
        # % (filename)s: 打印当前执行程序名
        # % (funcName)s: 打印日志的当前函数
        # % (lineno)d: 打印日志的当前行号
        # % (asctime)s: 打印日志的时间
        # % (message) s: 打印日志信息
        ft = "%(asctime)s - %(filename)s - line:%(lineno)d - %(levelname)s: %(message)s"
        ft = logging.Formatter(ft)
        # 设置控制台和日志文件输出日志的格式
        self.stream_out.setFormatter(ft)
        self.error.setFormatter(ft)
        self.debug.setFormatter(ft)
        self.info.setFormatter(ft)


if __name__ == '__main__':
    logger = Logger().logger
    logger.info("info信息%s"%"info messages")
    logger.debug("debug信息")
    logger.error("error信息")

 

posted @ 2022-10-20 13:50  Mr沈  阅读(45)  评论(0编辑  收藏  举报