参考博客 - Python日志分级别输出到不同文件

参考思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。
通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。

# -*- coding: utf-8 -*-
import logging
import logging.handlers
import osdef setup_logger(logger_name):# root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))root_path = os.path.abspath(os.path.join(os.getcwd(), "../.."))  # 与项目根目录平级log_path = root_path + '/logs/' + logger_name + '.log'myapp = logging.getLogger(logger_name)myapp.setLevel(logging.INFO)  # 先将INFO及以上的日志都添加到logger,再按照是否WARNING过滤是否输出到文件formatter = logging.Formatter("%(asctime)s - %(filename)s - %(funcName)s[line:%(lineno)d] - %(levelname)s: %(message)s")rotatingHandler = logging.handlers.RotatingFileHandler(log_path, maxBytes=20 * 1024 * 1024, backupCount=10)rotatingHandler.setFormatter(formatter)myapp.addHandler(rotatingHandler)streamHandler = logging.StreamHandler()streamHandler.setFormatter(formatter)myapp.addHandler(streamHandler)# 过滤级别:控制台输出INFO和WARNING级别,文件只记录WARNING级别info_filter = logging.Filter()info_filter.filter = lambda record: record.levelno < logging.WARNING  # 设置过滤等级err_filter = logging.Filter()err_filter.filter = lambda record: record.levelno >= logging.WARNING# streamHandler.addFilter(info_filter)rotatingHandler.addFilter(err_filter)# 示例
def main():# setup_logger('log1', r'log1.log')# setup_logger('log2', r'log2.log')# log1 = logging.getLogger('log1')setup_logger('myapp')myapp = logging.getLogger('myapp')myapp.info("file test")myapp.warning("file warning")if __name__ == '__main__':main()# print(os.path.abspath(os.path.join(os.getcwd(), "../..")))

效果

控制台输出INFO和WARNING级别,文件只记录WARNING级别

【Python日志输出】控制台输出INFO和WARNING级别,文件只记录WARNING级别相关推荐

  1. C# 读取DXF全套实例 图形输出 控制台输出 dxf全部信息

    文件下载地址:C#读取DXF全套实例图形输出控制台输出dxf全部信息-网络基础文档类资源-CSDN下载 以下为其中一种输出方式 包含:netDxf源 输出结果: FILE NAME: sample.d ...

  2. python读取excel某一行内容-python3读取excel文件只提取某些行某些列的值方法

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  3. python获取控制台输出_Python | 用Python获取Windows控制台输出

    1 os模块实现 import os cmd = 'ping baidu.com' r = os.popen(cmd) for line in r.readlines(): print (line) ...

  4. 弃繁就简!一行代码搞定 Python 日志!

    写了这么多年的 Python ,我一直都是使用 Python 自带的 logging 模块来记录日志,每次需要写一些配置将日志输出到不同的位置,设置不同日志输出格式,或者将日志进行分文件和压缩等.这个 ...

  5. 弃繁就简,一行代码教你摆平Python 日志

    写了这么多年的 Python ,我一直都是使用 Python 自带的 logging 模块来记录日志,每次需要写一些配置将日志输出到不同的位置,设置不同日志输出格式,或者将日志进行分文件和压缩等.这个 ...

  6. Python控制台输出颜色,让你的Python程序更加生动活泼

    Python控制台输出颜色,让你的Python程序更加生动活泼 在编写Python程序时,我们通常需要使用到控制台输出.而控制台输出的内容通常是黑白的,缺乏生动和互动性.那么如何让Python程序在控 ...

  7. python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告

    这段时间,在家时间自由(除了睡觉8小时,其他时间都在工作和学习),有大把的时间实操练习一些硬技能: 今天,更新一篇利用Jenkins这套框架,调用Python自动化脚本,并输出测试报告的手把手实操文章 ...

  8. python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!

    日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...

  9. python日志处理_Python之日志处理(logging模块)

    转发:https://www.cnblogs.com/yyds/p/6901864.html 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 loggi ...

最新文章

  1. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符
  2. codevs1217 借教室 题解
  3. main函数的参数问题 (转载)
  4. HBase 2.X版本的元数据修复及一种数据迁移方式
  5. css选择器的综合使用
  6. Web Bundles 学习笔记
  7. Marketing Cloud contact主数据的csv导入
  8. MixedRealityToolkit-Unity:MR应用必用神器
  9. 查询mysql所有表的大小
  10. 架构运维篇(五):Centos7/Linux中安装RocketMQ
  11. PyCharm专业版破解
  12. H264中一些很有用的解释
  13. 分享基于HTTP长连接的Web端即时通讯技术
  14. 监控系统 Prometheus 的说明
  15. 概率论考点之相关系数
  16. 2018.8.9日,预习笔记,Linux软件包安装和卸载
  17. English - every和each的用法和区别
  18. D. Martial Arts Tournament
  19. Python基础语法(一)——变量定义和运算符的使用
  20. 海藻酸盐水凝胶包覆生长因子丝素蛋白微球

热门文章

  1. Gym - 101972A Multiplication Dilemma(模拟)
  2. (转)离散化:两种离散化方式详解
  3. a律13折线pcm编码例题_a律13折线pcm编码例题
  4. java中日期计算2月份_计算两日期间2月29日总数的Java程序
  5. qpython怎么添加pip_Q: 在Windows上安装Python 2.7的pyHook和pip
  6. python 提取前五行_Pandas 1:如何在Python中载入数据集
  7. hdu3007(最小覆盖圆问题)
  8. MAP文件和调试(VC)(从崩溃地址找出错源码位置)
  9. EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据
  10. C++ 类和对象(二):构造函数、析构函数、拷贝构造函数、运算符重载