今天研究了一下python标准库中的logging模块,在多个模块的情景下输出日志

import logging
from logging_test2 import log_test# logging.basicConfig(filename='log_example.log',
#                     level=logging.DEBUG,
#                     filemode='w',
#                     )
# logging.debug('This message should go to the log file')
# logging.info('So should this')
# logging.warning('And this,too')logger = logging.getLogger('test')logger.setLevel(logging.DEBUG)fh = logging.FileHandler('log_example_2.log',mode='a',encoding='utf-8')
fh.setLevel(logging.DEBUG)ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)formatter = logging.Formatter('%(asctime)s: %(levelname)s %(name)s %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)logger.addHandler(fh)
# logger.addHandler(ch)logger.info('This is a info message')
log_test()
logger.critical('This is a critical message')

而这里的log_test函数是从另一个模块中导入的,log_test的写法如下:

import logginglogger = logging.getLogger('test.test2')def log_test():logger.info('This message come from log_test function!')logger.error('This ERROR message come from log_test function!')

可以看到,我们使用logging.getLogger()来获取某个指定名称的日志,在模块中获取同一个模块名称即可让不同模块的日志按照指定的方式统一输出了,另外,我们也可以通过.的方式来指定,例如在log_test所在的模块中指定logger为'test.test2'也可以。

可以通过logging.FileHandler()来指定日志的输出地方,并通过设置日志输出等级来过滤指定水平的日志,日志通过logger.info(),logger.debug(),logger.warning(),logger.error(),logger.critical()来输出,这里的logging.StreamHandler()指得是将日志输出到标准输出

最终的结果如下:

2019-05-26 20:12:32,584: INFO test This is a info message
2019-05-26 20:12:32,584: INFO test.test2 This message come from log_test function!
2019-05-26 20:12:32,584: ERROR test.test2 This ERROR message come from log_test function!
2019-05-26 20:12:32,584: CRITICAL test This is a critical message

最后附上formatter中可以用的一些变量列表

%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s  调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有

多个模块的log日志输出相关推荐

  1. 华为如何在开发者选项观察错误日志_爬虫scrapy框架--log日志输出配置及使用

    1.在配置文件中设置日志输出文件名和日志等级 1.为什么以日期为文件名? 因为这样可以方便开发者查看每天的日志信息,同时也可以防止单文件log日志信息堆积的越来越多,所以将当天日志信息保存到当天的日志 ...

  2. python logging模块打印log日志到文件和屏幕

    一.logging的框架 1. Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志 2. Handlers: 决定将日志记录分配至正确的目的地 3. Filters:对日志 ...

  3. log日志输出到文件:

    log日志输出到文件: 输出到不同的文件夹:(需要配置xml文件) <?xml version="1.0" encoding="UTF-8"?> & ...

  4. 39、Springboot 项目集成Log日志输出功能,并按每小时分组分割文件

    Logback的引入 之所以引入logback ,最主要原因是因为它非常强大的兼容性,能够自然平滑的支持log4j或者其他日志组件,官方文档非常的充分,对初学者十分友好,能够快速上手,它当前分为三个模 ...

  5. Python3 装饰器进行log日志输出

    前言 使用Python 装饰器decorator来对函数进行日志输出_ 2021年3月 测试可用 环境 Python 3.7 代码 代码目录: logger.py -> 日志装饰器: 用来写lo ...

  6. delphi的一款非常迷你+实用的Log日志输出单元

    思路来自:Delphi开发系列(3):日志记录组件_老虾米-CSDN博客_delphi 日志组件 属于站在前人的肩膀上看世界.前作者也是从RealThinClient控件中剥离出日志输出单元,并添加日 ...

  7. Android日志[基础篇]Android Log日志输出

    Android日志[基础篇]二 Android Studio修改LogCat日志的颜色 android.util.Log输出日志的常用方法如下: Log.v(String tag, String ms ...

  8. JNI Log 日志输出

    1.创建Native 项目 2.在app/src/main/cpp/CMakeLists.txt里会有查找标准log库的代码 find_library( log-liblog ) 然后链接到需要使用日 ...

  9. 【Java】log日志输出

    一.如果是maven项目 1.pom.xml中加入依赖 <dependency> <groupId>log4j</groupId> <artifactId&g ...

最新文章

  1. ZBrush全面入门学习教程 Schoolism – Introduction to ZBrush
  2. 讲讲 Redis 缓存更新一致性
  3. java自动生成数据库代码
  4. mysql中find_in_set结合GROUP_CONCAT使用
  5. Linux下查看系统配置
  6. 【原创】数据库中为什么不推荐使用外键约束
  7. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. HDU1466 计算直线的交点数
  9. bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)
  10. ubuntu 设置静态ip,但显示scope global secondary ens33
  11. 5G网络架构 — 接入网/传输网/核心网
  12. 数据分析处理之词频统计
  13. python中temp是什么意思_.temp(temp是什么意思?)
  14. 课题设计T25,使用51单片机设计一个里程计数器,Proteus设计,keil程序
  15. 3dsMax Biped骨骼缩放
  16. 如何分析用户复购行为?
  17. 数字化转型的三个重点方向
  18. 月下夜想曲200.6(攻略4)
  19. 计算机导论课后总结四
  20. 基于GMap.Net的地图解决方案

热门文章

  1. 运营商IMS网间互联互通组网关键技术研究
  2. 一个男人关心的东西决定了他的层次
  3. 【Android】Intent传递数据量过大的问题android.os.TransactionTooLargeException
  4. 敬业签苹果ios手机便签APP里的录音怎么转文字?
  5. springboot+rocketmq(5):实现批量消息
  6. 了解一下chirp,扫频信号的生成
  7. Android实现调用系统相机录像及实现录音
  8. 自己建服务器 语音盒子_自建语音服务器
  9. 【PHP】PHP基本语法
  10. 安全帽识别系统-智慧船舶的守夜人