【logging】python之日志记录

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

logging文件记录

1. 正文

import os
import sys
from logging.handlers import RotatingFileHandler
from concurrent_log_handler import ConcurrentRotatingFileHandler
import logging 
from time import strftime
import copy 

class MyLog(object):
    def __init__(self,name):
        # 输出日志路径
        PATH = os.path.abspath('.') + '/logs/'
        os.makedirs(PATH, exist_ok=True)
        # 设置日志格式#和时间格式 strftime("%Y-%m-%d")
        FMT = '%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] - %(levelname)s: %(message)s'
        DATEFMT = '%Y-%m-%d %H:%M:%S'

        self.logger = logging.getLogger(name)
        self.formatter = logging.Formatter(fmt=FMT, datefmt=DATEFMT)
        self.log_filename = '{0}{1}.log'.format(PATH, 'mylog')

        self.logger.addHandler(self.get_file_handler(self.log_filename))
        self.logger.addHandler(self.get_console_handler())

        # 设置日志的默认级别
        self.logger.setLevel(logging.DEBUG)

    # 输出到文件handler的函数定义
    def get_file_handler(self, filename):
    	# 多进程问题处理,否则可用RotatingFileHandler
        rotatehandler = ConcurrentRotatingFileHandler(filename,maxBytes=10*1024*1024,backupCount=5)
        rotatehandler.setFormatter(self.formatter)
        return rotatehandler

    # 输出到控制台handler的函数定义
    def get_console_handler(self):
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setFormatter(self.formatter)
        return console_handler

使用

mylog = MyLog('before_run').logger
messege = '记录的信息'
mylog.info(messege)

若对多进程程序进行日志保存,可参考文末链接。

参考

[1] https://juejin.cn/post/6844904039210024967#heading-5

猜你喜欢

转载自blog.csdn.net/weixin_39190382/article/details/129711395