logging日志管理

news2024/11/18 13:25:02

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 logging

logging.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.config

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

test.py

import logging.config

logger.info('this is a info')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渣土车空车未盖盖识别系统 OpenCv

渣土车空车未盖盖识别系统通过OpenCvyolo网络模型实时检测路过的渣土车情况,发现空车未盖盖立即进行抓拍回传。OpenCV基于C实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV CAPI和Python语言…

Android开发中的线程池使用

一、前言 既然Android中已经有了线程的概念,那么为什么需要使用线程池呢?我们从两个方面给出使用线程池的原因。 首先线程的新建和销毁都是存在性能上的消耗的,如果一个时间段有大量的网络请求,那么就需要多个线程的创建与销毁&am…

NSGA and NSGA-II

目录1 NSGA1.1 传统多目标优化方法1.2 多目标转为单目标的缺点1.3 权重向量距离说明1.4 NSGA方法1.4.1 流程1.4.2 关键步骤1.5 注意2 NSGA-II2.1 NSGA的缺点2.2 NSGA-II在NSGA上的变动2.3 NSGA-II流程1 NSGA 1.1 传统多目标优化方法 使用权重向量,将多目标问题转化…

Java入门练习题及其答案第一弹

Java入门练习题及其答案第一弹 文章目录Java入门练习题及其答案第一弹素数打印乘法口诀表最大公约数水仙花数二进制中1的个数二进制奇偶数位素数打印 只能被1和自己整除 import java.util.Scanner;public static void main(String[] args) {Scanner scanner new Scanner(Sys…

UI自动化测试-第一个测试脚本

前提 我们在进行UI自动化测试时,一般采用javaselenium或者pythonselenium的方式。由于python比较简单,上手快,因此建议大家采用pythonselenium的方式来进行UI自动化。 1、安装pycharm PyCharm是一种Python IDE(Integrated Deve…

【OpenCV-Python】教程:7-5 理解SVM

OpenCV Python SVM 学习 【目标】 直观理解 SVM 【理论】 线性可分 下图有两种类型的数据,红色和蓝色。在kNN中,对于一个测试数据,我们用来测量它与所有训练样本的距离,并取距离最小的一个。测量所有的距离需要大量的时间&am…

计算距离春节还有多长时间

你知道距离春节,还剩下多少时间吗? 或许你已经在默默心算了。 可是,如果我想要精确一点的结果,比如精确到多少分钟、多少秒呢? 要怎么计算呢? 这里可以使用Python进行计算。 首先,需要导入…

Opencv项目实战:18 人体姿态检测

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码讲解与介绍 Basics.py PoseModule.py Example.py 人体姿态图​编辑 4、项目资源 5、项目总结 0、项目介绍 mediapipe中有人体姿态检测的功能,今天我们就将实现最最基础的人体姿态估计项目,它…

【C++】深拷贝和浅拷贝

目录 浅拷贝 深拷贝 字符串的构造 例有两个类的深拷贝: 浅拷贝 在类中,若我们不写拷贝构造函数,则程序会提供一个默认的拷贝构造函数,该函数为浅拷贝。 //默认拷贝构造 ---浅拷贝--值复制 类名(const 类名& 形参名) {成…

【实时数仓】DWS层之商品主题计算、地区主题表(FlinkSQL)

文章目录一 DWS层-商品主题计算1 把JSON字符串数据流转换为统一数据对象的数据流(1)转换订单宽表流数据(2)转换支付宽表流数据2 把统一的数据结构流合并为一个流(1)代码(2)测试3 设定…

216. 组合总和 III

216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输…

3.2 Static Terrestrial Laser Scanners 静态地基激光扫描仪

本章节介绍的静态地基激光扫描系统指的是那些在一个固定位置的位置上对周边场景地物特征进行扫描的设备。该类型设备的扫描测量机制是,通过激光测距仪进行斜距测量,与此同时通过水平和竖直两个方向上同步运动的角度编码器来记录角度变化值(如…

编译原理——正规式、NFA构造DFA

一、DFA和NFA的区别 NFA:非确定有限自动机 DFA:确定有限自动机 NFA在同一状态,可以有多条出边,DFA在同一状态,只能有一条出边; NFA的初态可以具有多个,DFA的初态是唯一的; 比如这个…

数据结构入门——栈和队列详解

栈和队列详解1 栈1.1 栈的概念及结构1.2 栈的实现1.3 支持动态增长的栈1.3.1 结构声明1.3.2 栈的初始化和销毁1.3.3 入栈和出栈操作1.3.4 栈的判空和元素个数2 队列2.1 队列的概念及结构2.2 队列的实现2.3 链表实现队列2.3.1 结构声明2.3.2 队列的初始化和销毁2.3.3 队列入队和…

【工作流Activiti7】4、Activiti7 结束/终止流程

1. 结束/终止 正在运行的流程实例 思路:跟回退一样的思路一样,直接从当前节点跳到结束节点(EndEvent) /*** 结束任务* param taskId 当前任务ID*/ public void endTask(String taskId) {// 当前任务Task task taskService…

Tomcat学习

文章目录1、Tomcat是什么?2、Tomcat安装部署java环境部署tomcat目录结构介绍webapps目录bin目录tomcat启停方式3、Tomcat配置文件tomcat-users.xmlserver.xml结构组件详情配置文件注释4、Tomcat端口5、JVM调优6、Tomcat启动慢解决7、Tomcat面试题目1.Tomcat的默认端…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

一、问题描述 首次用vscode运行vue项目时,报错: npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 二、解决 我的解决过程:检查是否安装node.js环境 已安装node 这样一来,真不知道怎么回事了。环境也没有…

五、Arduino IDE开发esp8266环境搭建

1、安装驱动程序 (1)安装USB转串口驱动程序。 (2)根据板载的USB转串口驱动芯片选择合适驱动安装。USB转串口芯片负责和电脑之间进行数据通信。 (3)常见USB转串口驱动 CP210x驱动:CP210x USB 至 UART 桥 VCP 驱动器 - 芯科科技 CH340驱动 2、Arduino IDE环境搭建 要想使用Ar…

数据结构与算法java实战篇--高级排序

目录 一.希尔排序 二.划分 三.快速排序 1. 快速排序的算法 2.选择枢纽 一.希尔排序 希尔排序是基于插入排序的算法来实现的,不同的是希尔排序是采用n-增量来实现排序,如下是希尔排序的图解: 希尔排序会先以n个增量对元素进行划分&#xf…

原神私服 grasscutter搭建及食用教程 v3.3

本教程搭建过程食用vmware虚拟机服务端搭建过程及其简单。照着教程操作即可。本次对应的版本是3.3的版本,后期会持续更新。 一.资源下载准备: 1.vmwera16虚拟机下载安装自己百度吧,非常简单。一路next安装完后再输入一个百度来的秘钥即可。…