发布于2019-08-22 17:02 阅读(1257) 评论(0) 点赞(6) 收藏(0)
总结:
方法 | 简述 |
---|---|
logger.getLogger() | 创建Logger对象。name:logger日志器的名字 level :等级(int类型) |
logger.debug() | 打印debug等级的信息 |
logger.info() | 打印info等级的信息 |
logger.warning() | 打印warning等级的信息 |
logger.error() | 打印error等级的信息 |
logger.critical() | 打印critical等级的信息 |
logger.setLevel() | 设置日志l等级的信息 |
logger.addHandler() | 日志器的添加一个处理器(Handler) |
logger.addFilter() | 日志器的添加一个过滤器(Filter) |
注意:logger设置等级,基于logging的等级,如果logging设置等级info,则所有的等级都是基于logging等级上。
方法 | 简述 |
---|---|
logging.StreamHandler | 日志消息发送到Stream |
logging.FileHandler | 日志消息发送磁盘文件,默认文件大小无上限 |
ogging.handlers.RotatingFileHandler | 日志消息发送磁盘文件,支持按日志按大小切割 |
logging.hanlders.TimedRotatingFileHandler | 日志消息发送磁盘文件,支持按日志按时间切割 |
logging.handlers.HTTPHandler | 日志消息发送到HTTP服务器(GET、POST) |
logging.handlers.SMTPHandler | 日志消息发送到指定的email地址 |
方法 | 简述 |
---|---|
handler.setLevel() | 设置handler要处理日志消息的等级 |
handler.setFormatter() | 为handler要设置一个格式器对象 |
handler.addFilter() | 为handler要设置一个过滤器对象 |
注意:handler设置等级,基于logging的严重等级和logger的严重等级。
import logging
# fmt:格式化字符串,默认使用message的原始值
# datefmt:指定日期格式的字符串
logging.Formatter(fmt=None, datefmt=None)
# 创建对象
import logging
class IgnoreFilter1(logging.Filter):
"""小米文字的日志"""
def filter(self, record): # 固定写法
return "小米" not in record.getMessage()
class IgnoreFilter2(logging.Filter):
"""小白文字的日志"""
def filter(self, record): # 固定写法
return "小白" not in record.getMessage()
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()
logger.addFilter(IgnoreFilter1())
logger.addFilter(IgnoreFilter2())
logger.setLevel(0)
logger.debug("小明")
logger.info("小白")
logger.warning("小米")
logger.error("小华")
logger.critical("小七")
结果:
DEBUG:root:小明
ERROR:root:小华
CRITICAL:root:小七
import logging
fmt_control = '控制台> %(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
fmt_file = '文件> %(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
# 创建控制台输出日志格式-格式器对象
formatter_control = logging.Formatter(fmt_control)
# 创建文件输出日志格式-格式器对象
formatter_file = logging.Formatter(fmt_file)
# 创建日志器对象
logger = logging.getLogger()
logger.setLevel(0)
# 创建控制台输出-处理器对象
handler_control = logging.StreamHandler()
# 设置控制台输出-处理器对象,输出格式
handler_control.setFormatter(formatter_control)
# 添加控制台处理对象到日志器中
logger.addHandler(handler_control)
# 创建文件输出-处理器对象
handler_file = logging.FileHandler("./a.log",encoding="utf-8")
# 设置文件输出-处理器对象,输出格式
handler_file.setFormatter(formatter_file)
# 添加文件输出处理器对象到文件中
logger.addHandler(handler_file)
logger.debug("---debug---")
logger.info("---info---")
logger.warning("---warning---")
logger.error("---error---")
logger.critical("---critical---")
TimedRotatingFileHandler参数:
- filename:log文件名字
- when:
```
Current 'when' events supported:
# S - Seconds ---按秒单位
# M - Minutes ---按分单位
# H - Hours --- 按小时单位
# D - Days ---- 按天单位
# midnight - roll over at midnight --每天晚上12点,即24:00
# W{0-6} - roll over on a certain day; 0 - Monday ---每个星期几进行分类 (0代表星期一)
# 不区分大小写
```
- interval:时间间隔(比如when="s",interval=2,则每2秒分隔一个文件)
- backupCount:保存日志文件的个数(超过的会抛弃,值为3,则会保存3个日志带有时间的文件,和一个本文件)
-encoding:编码格式(encoding="utf-8")
import logging.handlers
import time
logger = logging.getLogger()
logger.setLevel(0)
# 日志格式
fmt = "按照时间进行分割 %(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
formatter = logging.Formatter(fmt)
# 输出到文件,每日一个文件
fh = logging.handlers.TimedRotatingFileHandler(filename="./a.log", when='S', interval=1, backupCount=3, encoding="utf-8")
fh.setFormatter(formatter)
fh.setLevel(logging.INFO)
logger.addHandler(fh)
for i in range(5):
time.sleep(1)
logger.debug("---debug---")
logger.info("---info---")
logger.warning("---warning---")
logger.error("---error---")
logger.critical("---critical---")
结果:每过一秒会生成一个文件,保存起来,a.log文件保存的是最新的log文件。
import logging.handlers
logger = logging.getLogger()
logger.setLevel(0)
fmt = "按照时间进行分割 %(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
formatter = logging.Formatter(fmt)
fh = logging.handlers.RotatingFileHandler(filename="./a.log", maxBytes=10, backupCount=3, encoding="utf-8")
fh.setFormatter(formatter)
fh.setLevel(logging.INFO)
logger.addHandler(fh)
for i in range(3):
logger.debug("---debug---")
logger.info("---info---")
logger.warning("---warning---")
logger.error("---error---")
logger.critical("---critical---")
)
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=WARNING
formatter=simpleFormatter
args=("file_config_log.log", "a")
[formatter_simpleFormatter]
format=%(asctime)s %(name)s - %(levelname)s - %(message)s
datefmt= %Y-%m-%d %H:%M:%S
[loggers]
# 定义logger模块,root是父类,必须存在
# 在python中通过logging.getLogger(NAME)调用,所有都继承root
keys=root,simpleExample
[handlers]
# 定义处理器
keys=consoleHandler,fileHandler
[formatters]
# 定义格式器
keys=simpleFormatter
[logger_root]
# 配置日志器的参数,以及使用的处理器
level=DEBUG
# 使用consoleHandler处理器
handlers=consoleHandler
[logger_simpleExample]
# 同理设置日志器参数,等级
level=DEBUG
# 使用两个处理器
handlers=consoleHandler,fileHandler
# logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块
qualname=simpleExample
# propagate 是否继承父类的log信息,0:否 1:是
# 如果设置为1,则root也会输出其他子类日志器的输出
propagate=0
[handler_consoleHandler]
# 处理器的类
class=StreamHandler
# 处理器等级
level=DEBUG
# 使用指定的格式器
formatter=simpleFormatter
# 输出到控制台,具体参数对应python的StreamHandler
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=WARNING
formatter=simpleFormatter
# 参数来源于对应类的参数
# class FileHandler(StreamHandler):
"""
A handler class which writes formatted logging records to disk files.
"""
# def __init__(self, filename, mode='a', encoding=None, delay=False):
args=("file_config_log.log", "a")
[formatter_simpleFormatter]
format=%(asctime)s %(name)s - %(levelname)s - %(message)s
datefmt= %Y-%m-%d %H:%M:%S
import logging
import logging.config
# 使用配置文件配置logging
import time
logging.config.fileConfig("log.config")
logger = logging.getLogger("simpleExample")
# 使用logger
logger.debug("debug")
logger.info("info")
logger.warning("warning")
time.sleep(1)
logger.error("error")
logger.critical("critiacl")
作者:bnggo
链接:https://www.pythonheidong.com/blog/article/53129/bb6f0086b5475e104146/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!