Formatter: 默认形式为: %Y-%m-%d %H:%M:%S. 格式为: %()s
Logger.setLevel() 设置日志级别 LoaddHand()和removeHandler()增加和删除日志处理器 Logger.addFilter()和Logger.removeFilter增加和删除过滤器 Logger.debug(),Logger.info(),Logger.warning(),Logger.error(),and Logger.critical()创建不同的级别日志 GetLogger()获取日志的根示例
setLevel()设置日志级别 setFormatter()设置输出格式 addFilter()and removeFilter增加和删除过滤器
#coding:utf-8 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')
打印输出: WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical message
从上输出的可以的出:
1.输出的内容只有warning、error、critical
2.从上知道日志的级别依次为CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET 。只有大于info的级别日志才在输出中显示
3.默认出输出的内容为:”级别:用户输入内容”
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='test.log', filemode='w') logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message')
**打印输出: Tue, 25 Apr 2021 17:46:33 demo3.py[line:7] DEBUG debug message Tue, 25 Apr 2021 17:46:33 demo3.py[line:8] INFO info message Tue, 25 Apr 2021 17:46:33 demo3.py[line:9] WARNING warning message Tue, 25 Apr 2021 17:46:33 demo3.py[line:10] ERROR error message Tue, 25 Apr 2021 17:46:33 demo3.py[line:11] CRITICAL critical message
从上图输出的可以的出:
1.可以通过配置basicConfig参数来配置模块输出内容以及各式
2.Leve指输出级别至少是多少的时候才能输出
3.filemode文件打开的方式
4.format 指输出各式,整体格式
5.datefmt 日期输出格式
6.stream指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为
7.sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。(该示例没体现)
简单例子*
fh = logging.FileHandler('test.log') ch = logging.StreamHandler()
1.Handler作用: Handler对象负责发送相关的信息到指定目的地,有几个常用的Handler方法: Handler.setLevel(lel):指定日志级别,低于lel级别的日志将被忽略 Handler.setFormatter():给这个handler选择一个Formatter Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象
1.通过通过addHandler()方法为Logger添加多个Handler:logger.addHandler(fh);logger.addHandler(ch)
以下是部分Handler简介:
1.logging.StreamHandler 可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
2.logging.FileHandler 用于向一个文件输出日志信息
3.logging.handlers.RotatingFileHandler 类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出4.logging.handlers.TimedRotatingFileHandler 和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就自动创建新的日志文件5.logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。6.logging.handlers.DatagramHandler 使用UDP协议,将日志信息发送到网络。7.logging.handlers.SysLogHandler 日志输出到syslog
8.logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志
9.logging.handlers.SMTPHandler 远程输出日志到邮件地址logging.handlers.MemoryHandler 日志输出到内存中的制定buffer
10.logging.handlers.HTTPHandler 通过"GET"或"POST"远程输出到HTTP服务器
取消下列两行程序的注释
#filter = logging.Filter('mylogger.child1.child2') #fh.addFilter(filter)
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt=
py文件
import logging import logging.config logging.config.fileConfig("logging.conf") # 采用配置文件 # create logger logger = logging.getLogger("simpleExample") # "application" code logger.debug("debug message") logger.info("info message") logger.warn("warn message") logger.error("error message") logger.critical("critical message")
通过本篇,了解了log日志的格式,python如何读取log日志,同时通过不同的方式读取日志
#coding:utf-8 import logging class loger(object): logger = '' def __init__(self, user='root', filename='', fileLevel = logging.DEBUG, fileformatter = '%(asctime)s - %(name)s - %(levelname)s:%(message)s', timeformatter='%Y-%m-%d %H:%M:%S' ): # 输出文件句柄 fh = '' #输出窗口句柄 ch = '' #设置文件的格式 formatter = logging.Formatter(fileformatter) formatter.datefmt = timeformatter # 配置用户 if user=='root': self.logger= logging.getLogger() else: self.logger = logging.getLogger(user) #设置文件输出级别 self.logger.setLevel(fileLevel) #可以控制控制台以及文件日志日志的级别, #配置输出窗口 ch = logging.StreamHandler() ch.setFormatter(formatter) #配置控制台输出日志的级别,方便实时观看 ch.setLevel(logging.INFO) self.logger.addHandler(ch) #配置输出 if filename is not '': fh=logging.FileHandler(filename) fh.setFormatter(formatter) self.logger.addHandler(fh) self.logger.warning('=========================================') def printf_log(self,msg,level='DEBUG',*args,**kwargs): print msg if level == 'CRITICAL': self.logger.critical(msg=msg,*args,**kwargs) elif level == 'ERROR': self.logger.error(msg=msg,*args,**kwargs) elif level == 'WARNING': self.logger.warning(msg=msg,*args,**kwargs) elif level == 'INFO': self.logger.info(msg=msg,*args,**kwargs) elif level == 'DEBUG': self.logger.debug(msg=msg,*args,**kwargs) else: self.logger.error(u'请出入正确的级别') if __name__ == "__main__": # loger1 = loger(filename='tttt.log',user='user1') # loger1.printf_log('test', level='WARNING') loger2=loger(filename='test.log',fileLevel=logging.DEBUG) loger2.printf_log(level='ERROR',msg=u'打印%d%s' %(1,'text')) loger2.printf_log(level='ERROR', msg=u'打印') loger2.printf_log(level='DEBUG', msg=u'打印') loger2.printf_log(level='INFO', msg=u'test') loger2.printf_log(level='INFO', msg=u'test')
2021-09-10 18:13:21,490 - root - WARNING - logger warning message 2021-09-10 18:13:21,490 - root - ERROR - logger error message 2021-09-10 18:13:21,490 - root - CRITICAL - logger critical message