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 '忽略的信息' > result.log
可以再结合 sed awk 等,比 logcat 还好使。。

