python日志模块

python的日志模块使用logging,如果想要输出符合自己的预期,需要重新定义,废话不多说,直接贴代码。

from logging.handlers import TimedRotatingFileHandler
import inspect
import logging
import os

def log(logName = 'app.log'):
    logName = logName
    this_file = inspect.getfile(inspect.currentframe())
    path = os.path.abspath(os.path.dirname(this_file))
    os.makedirs(f'{path}/AppLog', exist_ok=True)
    Formatter = '%(asctime)s  %(threadName)s  %(levelname)s  %(message)s'
    logFilePath = f'{path}/AppLog/{logName}'
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter(Formatter)
    # 不使用默认日志,要clear handlers
    # logger.handlers.clear()
    if not logger.handlers:
        # 增加heard,输出到控制台
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(logging.DEBUG)
        stream_handler.setFormatter(formatter)

        # 添加日志策略方法
        time_handler = TimedRotatingFileHandler(logFilePath,
                                                encoding='utf-8',
                                                when="midnight",
                                                backupCount=20)
        # 设置文件写入格式
        time_handler.setFormatter(formatter)

        # add handler
        logger.addHandler(time_handler)
        logger.addHandler(stream_handler)

    return logger

 

handler = TimedRotatingFileHandler(logFilePath, when="midnight", interval=1, backupCount=20) 定义写入日志的策略:

1.每天一个日志文件。

2.超过20个,删除最早生成的日志。

 

formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 定义日志输出的格式

log().debug('Hello World...')

 日志输出:

 

定义输出日志格式:

%(name)s:Logger的名字
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息

 

posted @ 2018-09-27 14:24  三只松鼠  阅读(1325)  评论(0编辑  收藏  举报