python 日志讲解
基本用法
import logging logging.debug('debug message') logging.info('info message') logging.warn('warn message') logging.error('error message') logging.critical('critical message')
将日志记录到文件中
import logging # 配置日志文件和日志级别 logging.basicConfig(filename='logger.log', level=logging.INFO) logging.debug('debug message') logging.info('info message') logging.warn('warn message') logging.error('error message') logging.critical('critical message')
更加完善的日志功能
- Logger 即记录器,Logger提供了日志相关功能的调用接口。
Logger对象从不直接实例化,而是通过模块级的功能logging.getLogger(name)创建Logger实例。调用 logging.getLogger(name) 功能时,如果传入的name参数值相同,则总是返回同一个Logger对象实例的引用
- Handler 即处理器,将(记录器产生的)日志记录发送至合适的目的地。
Handler 将日志信息发送到设置的位置,可以通过Logger对象的addHandler()方法为Logger对象添加0个或多个handler。这种往往应用到用户输出到不同地方需要不同的样式,等级的情况
常用的Handler为StreamHandler, FileHandler, 和NullHandle
- Filter 可用于Logger对象或Handler对象,用于提供比日志等级更加复杂的日志过滤方式。
如果把filter设置为filter=logging.Filter('A.B'),则logger ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’ 产生的日志信息可以通过过滤,但'A.BB', 'B.A.B'均不行
- Formatter 即格式化器,指明了最终输出中日志记录的格式。
默认的日志格式为%(asctime)s - %(levelname)s - %(message)s
默认的时间格式为%Y-%m-%d %H:%M:%S
通过代码实现
#!/usr/local/bin/python # -*- coding: utf-8 -*- import logging # create logger logger = logging.getLogger('simple_example') # Set default log level logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.WARN) ch2 = logging.FileHandler('logging.log') ch2.setLevel(logging.INFO) # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限 file_log_handler = RotatingFileHandler("./logs/log", maxBytes=1024 * 1024 * 100, backupCount=10) # create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch ch.setFormatter(formatter) ch2.setFormatter(formatter) # add ch to logger # The final log level is the higher one between the default and the one in handler logger.addHandler(ch) logger.addHandler(ch2) # 'application' code logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')
通过配置文件配置并使用日志模块
通过配置文件配置日志模块时,配置文件通常使用.ini格式,日志模块需要调用fileConfig
#!/usr/local/bin/python # -*- coding: utf-8 -*- import logging import logging.config logging.config.fileConfig('logging_config.ini') # create logger logger = logging.getLogger('root') # 'application' code logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')
logging_config.ini配置文件如下
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=INFO 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
通过Dict对象配置并使用日志模块
#!/usr/local/bin/python # -*- coding: utf-8 -*- import logging import logging.config config = { 'version': 1, 'formatters': { 'simple': { 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s', }, }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'DEBUG', 'formatter': 'simple' }, 'file': { 'class': 'logging.FileHandler', 'filename': 'logging.log', 'level': 'DEBUG', 'formatter': 'simple' }, }, 'loggers':{ 'root': { 'handlers': ['console'], 'level': 'DEBUG', # 'propagate': True, }, 'simple': { 'handlers': ['console', 'file'], 'level': 'WARN', } } } logging.config.dictConfig(config) print 'logger:' logger = logging.getLogger('root') logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message') print 'logger2:' logger2 = logging.getLogger('simple') logger2.debug('debug message') logger2.info('info message') logger2.warn('warn message') logger2.error('error message') logger2.critical('critical message')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?