Python中如何查看logging日志的几个问题

log 同时输出到 StreamHandler
1. 对于输出到文件后的日志,有什么工具可以过滤等级,时间等查看信息么,类似 androidIDE 中 logcat 的功能,pycharm 里有么,还是有第三方的工具?

2. 在 pycharm 里,没有之前的格式化信息,例如时间,等级等

谢谢。
Python中如何查看logging日志的几个问题

3 回复

帖子内容没贴出来,但我猜你是想问怎么用Python的logging模块来查看日志吧。这玩意儿用好了是真方便,用不好就一脸懵。直接上干货,几个常见场景的代码。

1. 最基本的控制台日志

import logging

# 设置日志级别和格式
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 使用
logging.debug('调试信息')
logging.info('普通信息')
logging.warning('警告信息')
logging.error('错误信息')

2. 同时输出到控制台和文件

import logging

# 创建logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 文件处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)

# 设置格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加到logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 使用
logger.debug('这个只有文件能看到')
logger.info('这个控制台和文件都能看到')

3. 按时间或大小分割日志文件

import logging
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler

logger = logging.getLogger(__name__)

# 按时间分割(每天一个文件,保留7天)
time_handler = TimedRotatingFileHandler('app.log', when='midnight', interval=1, backupCount=7)
time_handler.suffix = '%Y%m%d'

# 按大小分割(每个文件10MB,最多保留5个备份)
size_handler = RotatingFileHandler('app.log', maxBytes=10*1024*1024, backupCount=5)

# 设置格式并添加
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
time_handler.setFormatter(formatter)
logger.addHandler(time_handler)

4. 捕获异常堆栈

import logging

logging.basicConfig(level=logging.DEBUG)

try:
    1 / 0
except Exception as e:
    logging.error('出错了:', exc_info=True)  # 这会记录完整的堆栈跟踪
    # 或者用这个简写
    logging.exception('出错了:')  # 自动包含exc_info

5. 不同模块用不同logger

# module_a.py
import logging
logger_a = logging.getLogger('module_a')

# module_b.py  
import logging
logger_b = logging.getLogger('module_b')

# 主程序里分别配置
logging.getLogger('module_a').setLevel(logging.DEBUG)
logging.getLogger('module_b').setLevel(logging.WARNING)

关键点总结:

  • basicConfig()适合简单场景,复杂点的就得用getLogger()Handler
  • 日志级别:DEBUG < INFO < WARNING < ERROR < CRITICAL
  • 格式字符串里%(name)s是logger名字,%(levelname)s是级别,%(message)s是消息
  • 用不同的logger可以分别控制不同模块的日志级别

一句话建议:根据需求选择合适的日志级别和处理器组合。


1、grep
2、不用 IDE,不知道怎么看

grep

过滤日志并写到文件中

grep '需要的信息' xxx.log -A 100 | grep -V '忽略的信息' &gt; result.log

可以再结合 sed awk 等,比 logcat 还好使。。

回到顶部