Python日志处理模块loggin
程序员文章站
2022-06-30 20:44:33
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")