python----日志模块loggin的使用,按日志级别分类写入文件
Posted 楠峰岚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python----日志模块loggin的使用,按日志级别分类写入文件相关的知识,希望对你有一定的参考价值。
说明 | |
---|---|
DEBUG | 输出详细的运行情况,主要用于调试。 |
INFO | 确认一切按预期运行,一般用于输出重要运行情况。 |
WARNING | 系统运行时出现未知的事情(如:警告内存空间不足),但是软件还可以继续运行,可能以后运行时会出现问题。 |
ERROR | 系统运行时发生了错误,但是还可以继续运行。 |
CRITICAL |
一个严重的错误,表明程序本身可能无法继续运行。 |
这5个等级,也分别对应5种打印日志的方法:debug、info、warning、error、critical。默认的日志收集器是收集WARNING以上等级的日志。
2、日志文件分类存储代码,创建文件login_demo02.py
import logging class log: def __init__(self): # 创建自己的日志收集器 self.my_log = logging.getLogger("my_log") # 设置收集的日志等级,设置为DEBUG等级 self.my_log.setLevel("DEBUG") # 日志输出渠道 # 创建一个日志输出渠道(输出到控制台),并且设置输出的日志等级为INFO以上 self.l_s = logging.StreamHandler() self.l_s.setLevel("DEBUG") # 创构建一个日志输出渠道(输出到文件) l_f = logging.FileHandler("error.log",encoding=\'utf8\') l_f.setLevel("ERROR")#设置输出的日志等级为ERROR以上 l_d=logging.FileHandler("debug.log",encoding=\'utf-8\') l_d.setLevel("DEBUG")#设置输出的日志等级为DEBUG以上 cc=logging.FileHandler("info.log",encoding=\'utf-8\') cc.setLevel("INFO")#设置输出的日志等级为INFO以上 #将日志输出渠道添加到日志收集器中 self.my_log.addHandler(self.l_s) self.my_log.addHandler(l_f) self.my_log.addHandler(l_d) self.my_log.addHandler(cc) # 设置日志输出的格式 # 可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下: # % (name)s: 收集器名称 # % (levelno)s: 打印日志级别的数值 # % (levelname)s: 打印日志级别名称 # % (pathname)s: 打印当前执行程序的路径,其实就是sys.argv() # % (filename)s: 打印当前执行程序名 # % (funcName)s: 打印日志的当前函数 # % (lineno)d: 打印日志的当前行号 # % (asctime)s: 打印日志的时间 # % (thread) d: 打印线程ID # % (threadName)s: 打印线程名称 # % (process) d: 打印进程ID # % (message) s: 打印日志信息 ft = "%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s: %(message)s"#工作中常用的日志格式 ft = logging.Formatter(ft) # 设置控制台和日志文件输出日志的格式 self.l_s.setFormatter(ft) l_f.setFormatter(ft) l_d.setFormatter(ft) cc.setFormatter(ft)
if __name__ == \'__main__\': my_log=log().my_log ss="一条小日志" my_log.info(ss) my_log.debug(ss) my_log.error(ss)
运行结果如下:
3、其他文件调用
from login_demo02 import * my_log=log().my_log cc="这是一条日志" my_log.debug(cc) my_log.info(cc) my_log.error(cc)
运行结果:
使用日志配置进行日志保存:
创建log.conf文件,内容如下:
[loggers] keys=root,infoLogger [logger_root] level=DEBUG handlers=consoleHandler,fileHandler [logger_infoLogger] handlers=consoleHandler,fileHandler qualname=infoLogger propagate=0 [handlers] keys=consoleHandler,fileHandler [handler_consoleHandler] class=StreamHandler level=INFO formatter=form02 args=(sys.stdout,) [handler_fileHandler] class=FileHandler level=INFO formatter=form01 args=(\'../log/infolog/info.log\', \'a\') [formatters] keys=form01,form02 [formatter_form01] format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s [formatter_form02] format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s
代码如下:
import logging from logging import config class MyLog(object): def __init__(self): config.fileConfig(\'../config/log.conf\') self.logger = logging.getLogger() @property def my_logger(self): return self.logger if __name__ == \'__main__\': log = MyLog() log.my_logger.info(\'it is my test log message info\')
以上是关于python----日志模块loggin的使用,按日志级别分类写入文件的主要内容,如果未能解决你的问题,请参考以下文章