1.日志作用

不管是在项目开发还是测试过程中,项目运行一旦出现问题日志信息就非常重要了。日志是定位问题的重要手段,就像侦探人员要根据现场留下的线索来推断案情。

2.日志级别

脚本运行会有很多的情况,比如调试信息、报错异常信息等。日志要根据这些不同的情况来继续分级管理,不然对于排查问题的筛选会有比较大的干扰。日志一般定位的级别如下:

级别 何时使用
debug 调试信息,也是最详细的日志信息。
info 证明事情按预期工作。
warning 表明发生了一些意外,或者不久的将来会发生问题(如磁盘满了),软件还是在正常工作。
error 由于更严重的问题,软件已不能执行一些功能了。
critical 严重错误,表明软件已不能继续运行了。

普通输出直接用info类型,调试的时候用debug类型,如果预计有错误时那么我们就需要用error类型的日志。

3.日志格式

时间+模块+行数+日志具体信息

4.python的logging模块

logging模块包括Logger,Handler,Filter,Formatter四个部分。

名称 描述
Logger 记录器,用于记录日志。
Handler 处理器,将日志记录发送至合适的路径。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志的格式。

5.Logger记录器

Logger是一个树形层级结构,在使用接口debug,info,warn,error,critical;使用之前必须创建Logger实例,即创建一个记录器。
如果没有显式的进行创建,则默认创建一个root logger,并应用默认的日志级别(warn),Handler和Formatter。

import logging
import logginglogging.basicConfig(filename='run.log', level=logging.DEBUG)
logging.debug('this is a debug')  # 最低级别日志
logging.info('this is a info')
logging.warning('this is a warn')
logging.error('this is a error')
logging.critical('this is a critical')  # 最高级别日志

basicConfig 部分参数:
filename 指定日志文件名称。
filemode 指定打开文件的模式,如果指定了filename(如果文件模式未指定,则默认为a)。
format 为处理程序使用指定的格式字符串。
datefmt 使用指定的日期/时间格式。样式如果指定了格式字符串,则使用它来指定,格式字符串的类型
level 将根记录器级别设置为指定级别。

Tips:文件读写模式
w 以写方式打开
W 文件若存在,首先要清空,然后(重新)创建
a 以追加模式打开(从EOF开始,必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开
a+ 以读写模式打开

6.Handler处理器

将日志记录发送至合适的路径,常用的处理器类有三个:

  • StreamHandler
    将日志记录输出发送到诸如sys.stdout,sys.stderr或任何类似文件流的对象。输出在控制台。
  • FileHandler
    将日志记录输出发送到磁盘文件,它继承了StreamHandler的输出功能。输出在文件里。
  • NullHandler
    不做任何格式或输出

7.Filter过滤器

Handlers和Loggers可以使用Filters来完成比级别更复杂的过滤,一般只用于比较特殊的定制化需求。

8.Formatter格式化器

使用Formatter对象设置日志信息显示的规则,结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。

格式 描述
%(levelno)s 打印日志级别的数值
%(levelname)s 打印日志级别名称
%(pathname)s 打印当前执行程序的路径
%(filename)s 打印当前执行程序名称
%(funcName)s 打印日志的当前函数
%(asctime)s 打印日志的时间
%(thread)d 打印线程id
%(threadName)s 打印线程名称
%(process)d 打印进程ID
%(message)s 打印日志信息
logging.basicConfig(filename='run.log', level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d %(levelname)s %(message)s')

9.项目中日志使用方法

logger.conf 日志格式配置文件(使用时去掉备注部分)

[loggers]
keys=root,infoLogger  # 创建两个记录器[logger_root]
level=INFO # 日志显示info级别以上的
handlers=consoleHandler,fileHandler    # 控制台和日志文件两种显示方式[logger_infoLogger]
handlers=consoleHandler,fileHandler    # 控制台和日志文件两种显示方式
qualname=infoLogger
propagate=0    # 0表示输出日志,但不往更高级别的日志进行传递,比如不往root logger传递[handlers]
keys=consoleHandler,fileHandler    # 控制台和日志文件两种显示方式[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stdout,)[handler_fileHandler]
class=FileHandler
level=INFO # 日志文件输出的日志级别
formatter=form01   # 日志格式
args=('../log/ggmzx.log', 'a') # 日志文件路径[formatters]
keys=form01,form02 # 创建两种日志格式[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s[formatter_form02]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

logger_config.py

import logging.configconf_file = 'logger.conf'
logging.config.fileConfig(conf_file)
logger = logging.getLogger()

test.py

import logging.configlogger.info('this is a info')

logging日志管理相关推荐

  1. Logging Operator - 优雅的云原生日志管理方案 (一)

    Logging Operator是BanzaiCloud下开源的一个云原生场景下的日志采集方案.之前小白转载过崔大佬介绍的一篇文章,不过由于之前一直认为在单个k8s集群下同时管理Fluent bit和 ...

  2. Python日志管理工具:logging、logbook、Eliot、Raven和Sentry

    在实际接口自动化工作中,日志管理是一项至关重要的任务.本文介绍了Python中几个常用的日志管理工具:logging.logbook.Eliot.Raven和Sentry.我们将详细探讨它们的特点和用 ...

  3. 码农技术炒股之路——配置管理器、日志管理器

    配置管理器和日志管理器是项目中最为独立的模块.我们可以很方便将其剥离出来供其他Python工程使用.文件的重点将是介绍Python单例和logging模块的使用.(转载请指明出于breaksoftwa ...

  4. Kubernetes-基于EFK进行统一的日志管理

    1.统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用.对于大部分的应用来说,都会具有某种日志机制.因此,大多数容器引 ...

  5. 日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

    高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要. 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要.考虑到容器短暂和不固定的生命周期,当我们需 ...

  6. Spring Boot 日志管理

    在代码有问题的时候,很多人应该都是通过 debug 的方式去排查,往往忽略了日志的重要性. 好的日志管理可以快速定位问题出现的位置,也可以提高代码的阅读性.这篇博文主要介绍一下 Spring Boot ...

  7. 日志管理:(三)配置_JCL+Log4J中遇到的问题

    今天,要做一个很简单的事,那就是项目上线了,需要把各个子功能的日志分开,方便系统出线问题后,日志的查看,用过log4j的童鞋们都知道,这是很简单的,配置一个appender,再配置一个category ...

  8. maven的日志在哪里看_日志管理领域研究现状(2)

    从上一篇提到的<软件学报>上的综述文章开始,这段时间顺着引用又陆续看了一些日志管理方面的论文.这里摘录一些论文的数据和结论,还都挺有意思的. Examining the stability ...

  9. 容器日志管理 (2) 开源日志管理方案 ELK/EFK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<容器日志管理(1)>中介绍了Docker自带的logs子命令 ...

最新文章

  1. R语言计算每个分组的行数并将结果添加到dataframe中实战
  2. 大四可以正式入职吗_三方协议一签,就不是应届生了吗?高校毕业生注意,别错失身份...
  3. python全栈开发 * 24 知识点汇总 * 180705
  4. 设置ALV不同行的小数点位数
  5. SqlServer2014怎样还原数据库
  6. 服务器端 viewstate
  7. acm杭州电子科技大学新生赛
  8. CURL+preg_match()
  9. mysql --force 无效_【技能库】--mysql 索引失效 force index也失效-- 原因解决方案(256)...
  10. springboot 线程池和数据库链接池配置以及多线程效率实测
  11. 15个HTML5播放器插件
  12. 订单超时、定时任务解决方案和思路
  13. XiaomiRouter自学之路(02-软硬件环境搭建)
  14. 【C语言】初识C语言(中篇)
  15. 每日刷题:lightoj-1004 - Monkey Banana Problem
  16. 微端和网站可以放同一台服务器吗,微端放云服务器可以吗
  17. Linux 磁盘空间释放问题
  18. freeswitch + webRtc +jssip 实现web端语音通话
  19. 海思联咏安霸视觉AI SOC横向对比,你心中的王者有没有动摇过。
  20. java无法访问网络_java-IOException:网络适配器无法建立连接

热门文章

  1. CCIE第一天---QoS
  2. Android Snackbar基本使用
  3. 事务原子性、一致性、持久性的实现原理
  4. Excel调用MD5加密
  5. GBase8s数据库GRANT 语句
  6. 第2章 基础设施即服务(IaaS)-2-Docker
  7. Core Data 使用
  8. python判断汉字偏胖_python实现在线分词
  9. 重构类关系-Replace Inheritance with Delegation以委托取代继承十一
  10. 小王的研发日记-自动对焦(硬件与计算机通信)