欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python日志处理模块loggin

程序员文章站 2022-03-08 13:17:03
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。其主要优点如下: 1.可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息; 2.尤其是代码运行在服务器上,当出现问题时可以通过查看日志进 ......

    logging模块是python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。其主要优点如下:

  • 1.可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
  • 2.尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析。

    logging模块基本使用:

  • 设置logger名称

logger = logging.getlogger(log_name)

  • 设置log级别

logger.setlevel(logging.info)

  • 创建一个handler,用于写入日志文件

fh = logging.filehandler(log_file)

  • 设置日志级别,默认为logging.warning

fh.setlevel(loglevel[log_level])

  • 定义handler的输出格式

formatter = logging.formatter('%(asctime)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s')

fh.setformatter(formatter)

  • 添加handler

logger.addhandler(fh)

  • format

%(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: 打印日志信息

    示例代码如下:

import logging
import datetime
import os

# 定义日志级别字典
logleveldic={
    "info":logging.info,
    "debug":logging.debug,
    "warning":logging.warning,
    "error":logging.error
}

# 日志保存路径
logsavepath=os.path.join(os.getcwd(),"logs")
if not os.path.exists(logsavepath):
    os.makedirs(logsavepath,exist_ok=true)
# 当前时间
curtime=datetime.datetime.now().strftime("%y%m%d")
# 保存的日志的完整名称
logfile=os.path.join(logsavepath,curtime+".sadci.log")
# 日志级别
loglevel="error"

class logger:
    def __init__(self,logfile=logfile,loglevel=logleveldic["error"]):
        self.logfile=logfile
        self.loglevel=loglevel
        # 设置logger名称
        self.logger=logging.getlogger()
        # 设置参数级别
        self.logger.setlevel(self.loglevel)
        self.formatter=logging.formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
        # 判断handlers是否存在
        if not self.logger.handlers:
            #  写入控制台
            consolestream=logging.streamhandler()
            consolestream.setlevel(self.loglevel)
            consolestream.setformatter(self.formatter)
            #  写入文件
            filestream=logging.filehandler(self.logfile,mode="a")
            filestream.setlevel(self.loglevel)
            filestream.setformatter(self.formatter)
            self.logger.addhandler(consolestream)
            self.logger.addhandler(filestream)

def mylogger():
    return logger(logfile=logfile,loglevel=logleveldic[loglevel]).logger


if __name__ == '__main__':
    mylogger().error("test logg")