Logging模块梳理与备忘
更清楚的梳理了不同组件的配置关系
## 核心组件
通过全局配置并使用
全局配置:使用logging.basicConfig进行全局配置,这样所有的 logger默认都使用这个配置
logging.basicConfig(filename='log.txt',
format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s-%(funcName)s',
level=logging.ERROR)
logging.warning('waring:警告信息')
logging.error('error:错误信息')
逐项配置并使用
logger可以设置 handler、filter
handler可以设置filter、format
日志的处理链条:日志消息 → Logger → Handler → 输出
import logging
# 创建logger
logger = logging.getLogger('example')
logger.setLevel(logging.DEBUG)
# 创建 formatter
formatter = logging.Formatter('HANDLER格式: %(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 创建handler并设置format
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
# 将handler添加到logger
logger.addHandler(handler)
# 测试输出
logger.info('这是一条测试消息')
其他相关配置信息
日志等级
Format支持的变量
Filter 的使用示例
可以使用过滤器对象,也可以使用普通的函数来处理,根据返回值的 bool类型判断是否打印该消息
def filter(record):
print(record)
return True
mylogger = logging.getLogger('my-logger')
mylogger.addFilter(filter)
mylogger.error('error,一般用来打印一些错误信息')
Handler类型
StreamHandler 示例:将日志消息输出到控制台
import logging
logger = logging.getLogger('StreamHandlerExample')
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
logger.addHandler(handler)
logger.info('StreamHandler: 这是一个 info 消息')
FileHandler 示例:将日志消息输出到文件
import logging
logger = logging.getLogger('FileHandlerExample')
logger.setLevel(logging.INFO)
handler = logging.FileHandler('example.log')
logger.addHandler(handler)
logger.info('FileHandler: 这是一个 info 消息')
RotatingFileHandler 示例:将日志消息输出到文件,并在文件达到一定大小时自动轮转
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('RotatingFileHandlerExample')
logger.setLevel(logging.INFO)
handler = RotatingFileHandler('example.log', maxBytes=1024, backupCount=3)
logger.addHandler(handler)
logger.info('RotatingFileHandler: 这是一个 info 消息')
TimedRotatingFileHandler 示例:将日志消息输出到文件,并在指定时间间隔内自动轮转
import logging
from logging.handlers import TimedRotatingFileHandler
logger = logging.getLogger('TimedRotatingFileHandlerExample')
logger.setLevel(logging.INFO)
handler = TimedRotatingFileHandler('example.log', when='M', interval=1, backupCount=3)
logger.addHandler(handler)
logger.info('TimedRotatingFileHandler: 这是一个 info 消息')
SocketHandler 示例:将日志消息通过网络发送到指定的套接字
import logging
from logging.handlers import SocketHandler
logger = logging.getLogger('SocketHandlerExample')
logger.setLevel(logging.INFO)
handler = SocketHandler('localhost', 5000)
logger.addHandler(handler)
logger.info('SocketHandler: 这是一个 info 消息')
DatagramHandler 示例:将日志消息通过UDP发送到指定的地址
import logging
from logging.handlers import DatagramHandler
logger = logging.getLogger('DatagramHandlerExample')
logger.setLevel(logging.INFO)
handler = DatagramHandler('localhost', 5000)
logger.addHandler(handler)
logger.info('DatagramHandler: 这是一个 info 消息')
SMTPHandler 示例:将日志消息通过电子邮件发送
import logging
from logging.handlers import SMTPHandler
logger = logging.getLogger('SMTPHandlerExample')
logger.setLevel(logging.INFO)
handler = SMTPHandler(
mailhost=('smtp.example.com', 587),
fromaddr='from@example.com',
toaddrs=['to@example.com'],
subject='Log Message',
credentials=('user', 'password'),
secure=None
)
logger.addHandler(handler)
logger.info('SMTPHandler: 这是一个 info 消息')
SysLogHandler 示例:将日志消息发送到SysLog服务器
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger('SysLogHandlerExample')
logger.setLevel(logging.INFO)
handler = SysLogHandler(address='/dev/log')
logger.addHandler(handler)
logger.info('SysLogHandler: 这是一个 info 消息')
HTTPHandler 示例:将日志消息通过HTTP协议发送到指定的URL
import logging
from logging.handlers import HTTPHandler
logger = logging.getLogger('HTTPHandlerExample')
logger.setLevel(logging.INFO)
handler = HTTPHandler(
host='localhost:8080',
url='/log',
method='POST'
)
logger.addHandler(handler)
logger.info('HTTPHandler: 这是一个 info 消息')
NullHandler 示例:一个空的处理器,用于在没有配置日志处理器时避免错误
import logging
logger = logging.getLogger('NullHandlerExample')
logger.setLevel(logging.INFO)
handler = logging.NullHandler()
logger.addHandler(handler)
logger.info('NullHandler: 这是一个 info 消息')
许可协议:
CC BY 4.0