Python实现日志的记录

1 日志

1、介绍

  •  日志(Log)是一个记录事件或系统活动的文件或数据集,日志是系统管理员和开发者用于诊断问题、监视系统性能、以及追踪用户活动的关键工具。包含以下:
  1. 系统日志:记录操作系统、应用程序、硬件组件等的事件和错误。

  2. 应用程序日志:记录特定应用程序的运行状态、用户活动、异常等。

  3. 安全日志:记录与安全相关的事件,如登录尝试、权限更改、防火墙活动等。

  4. 数据库日志:记录数据库的更改、查询、事务等。

  5. Web服务器日志:记录Web服务器的活动,如访问者的IP地址、请求的资源、HTTP状态代码等。

2、结构

  • 日志通常具有时间戳,以便可以按照时间顺序查看事件。
  • 日志可能包含其他元数据,如用户ID、进程ID、事件类型等。

3、日志分析

  • 日志分析是处理和理解日志的重要步骤。通过使用日志分析工具,管理员和开发者可以:
    • 识别和解决系统或应用程序问题。
    • 监视系统性能和资源使用情况。
    • 检测安全漏洞或未经授权的访问。
    • 跟踪用户活动以进行审计或合规性检查。

4、关键因素

  • 在设计和实施日志系统时,需要考虑的一些关键因素包括:
    • 日志的存储和保留:确保有足够的存储空间来保存日志,并根据需要保留旧日志。
    • 日志的访问和权限:控制谁可以访问和修改日志,以确保数据的安全性和完整性。
    • 日志的传输和加密:如果需要将日志发送到远程位置进行存储或分析,应使用安全的传输方法(如TLS/SSL)来加密数据。
    • 日志的解析和可视化:提供易于使用的工具来解析和可视化日志数据,以便管理员和开发者可以轻松理解其内容。

2 模块

1、介绍

  • logging模块:Python标准库中的一个模块【不用安装】,它用于记录程序运行时的日志信息。

2、组件

  1. Logger(日志器)
    • 负责记录日志信息。
    • 可以设置日志级别、输出格式和输出位置等属性。
    • Logger对象通常通过logging.getLogger(name)获取,其中name是用于区分不同Logger的标识符。
  2. Handler(处理器)
    • 用于指定将如何处理和输出日志消息。
    • 可以将日志消息写入文件、控制台、网络等不同的目标。
    • 常用的Handler有StreamHandler(输出到控制台)、FileHandler(输出到文件)等。
  3. Formatter(格式化器)
    • 用于定义日志消息的显示格式。
    • 默认格式包括时间戳、日志级别、日志名称和消息内容等信息。
    • 可以根据需求自定义格式。
  4. Level(级别)
    • 用于指定日志记录的级别,包括DEBUG、INFO、WARNING、ERROR和CRITICAL。
    • 级别越高,记录的信息越少,通常用于控制日志的详细程度 【日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL】。
    • 日志级别
    • Level(级别)含义描述
      DEBUG调试程序调试bug时
      INFO信息程序正常运行时
      WARNING警告程序未按预期运行时

      ERROR

      错误

      程序出错误时

      CRITICAL严重特别严重的问题,导致程序不能再继续运行时

3、应用

  • 开发应用程序或部署开发环境阶段:可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试。
  • 应用上线或部署生产环境阶段:应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。

3 相关方法介绍

方法功能描述
logging.getLogger(name)创建或获取Logger对象
setLevel()设置Logger的日志级别
setFormatter()        设置Handler的日志格式化器
debug()使用Logger对象记录调试日志消息
info()使用Logger对象记录日志消息

warning()

使用Logger对象记录警告日志消息
error()使用Logger对象记录错误日志消息
critical()使用Logger对象记录严重日志消息
getLogger()        创建记录器对象
StreamHandler()创建标准流处理器
FileHandler()        创建文件处理器
addHandler()添加处理器到记录器
Formatter()创建格式器
setFormatter()设置格式


1、logging.basicConfig(filename, level, format, datafmt)

  • 功能:用来配置日志的基本选项。
  • 参数:
    • filename:指定日志输出到哪个文件,如果未指定则默认输出到控制台。
    • filemode: 指定打开文件的模式,默认为'a'表示追加模式。
    • format: 指定日志的输出格式。
    • datefmt: 用于指定日期/时间的格式。
    • level: 设置日志的最低级别,即低于这个级别的日志将被忽略。

2、logging.debug(msg)

  • 功能:记录调试的信息
  • 参数:
    • msg:日志记录的调试内容(str)

3、logging.info(msg)

  • 功能:记录程序正常运行的信息
  • 参数:
    • msg:日志记录的运行内容(str)

4、logging.warning(msg)

  • 功能:记录警告的信息
  • 参数:
    • msg:日志记录的警告内容(str)

5、logging.error(msg)

  • 功能:记录错误的信息
  • 参数:
    • msg:日志记录的错误内容(str)

6、logging.critical(msg)

  • 功能:记录严重错误的信息
  • 参数:
    • msg:日志记录的严重错误内容(str)

4 案例介绍

1、记录日志信息

import logging# 将日志信息记录到example.log文件中,且仅记录比 INFO级别更高的日志才会被纪录到文件里
logging.basicConfig(filename='example.log',level=logging.INFO)# 比INFO级别低,不会被记录
logging.debug('This message should go to the log file')# 以下2种级别的日志会被记录
logging.info('So should this')
logging.warning('And this, too')'''就可以在 example.log 文件存储相应的数据
'''

2、标准流与文件流

import logging
from logging import StreamHandler
from logging import FileHandler# 创建一个日志记录器
logger = logging.getLogger(__name__)# 设置为DEBUG级别
logger.setLevel(logging.DEBUG)# 标准流处理器,设置的级别为WARAING
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)
logger.addHandler(stream_handler)# 文件处理器,设置的级别为INFO
file_handler = FileHandler(filename="test.log")
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)logger.debug("this is debug")
logger.info("this is info")
logger.error("this is error")
logger.warning("this is warning")

3、格式器

import logging
from logging import StreamHandler# 创建一个日志记录器
logger = logging.getLogger(__name__)# 标准流处理器
stream_handler = StreamHandler()
stream_handler.setLevel(logging.WARNING)# 创建一个格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 设置handler的格式
stream_handler.setFormatter(formatter)# 添加到处理器
logger.addHandler(stream_handler)logger.info("this is info")
logger.error("this is error")
logger.warning("this is warning")
  •  格式器只能作用在处理器上,通过处理器的setFromatter方法设置格式器。
  • 一个Handler只能设置一个格式器。

4、日志配置

  • 可以将配置信息单独添加到配置文件,在使用时加载配置信息,实现配置与使用代码相分离。
# logging.conf[loggers]
keys=root[handlers]
keys=consoleHandler[formatters]
keys=simpleFormatter[logger_root]
level=DEBUG
handlers=consoleHandler[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
  • 加载配置文件
import logging
import logging.config# 加载配置
logging.config.fileConfig('logging.conf')# 创建 logger
logger = logging.getLogger()# 应用代码
logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")

感谢】如果对您有所帮助,欢迎关注点赞与收藏,它将是我持续更新的巨大动力,送上比  2^{10} 还 2^{10} 的感谢

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

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

相关文章

lcd屏幕verilog显示

一,VGA原理和时序 计算机显示区的显示有许多标准,常见的有VGA、SVGA等。在这里我们用VGA接口来控制显示器,也就是视频图形阵列。作为一 种标准的显示接口得到广泛的应用。 常见的彩色显示器一般由 CRT(阴极射线管)构成,色彩是由R、G、B(红、黄、 蓝)三基色组成。显示是…

前端UI框架Element Plus 和 Ant Design Vue哪个好

Element Plus 和 Ant Design Vue 都是基于 Vue.js 的 UI 组件库&#xff0c;它们具备一系列可复用的组件和丰富的功能&#xff0c;并且是当前国内主流的两个 UI 组件库。 &#xff08;1&#xff09;Element Plus 是饿了么前端团队推出的开源项目&#xff0c;是对 Element UI 的…

completefuture造成的rpc重试事故

前言 最近经历了一个由于 completefuture 的使用&#xff0c;导致RPC重试机制触发而引起的重复写入异常的生产bug。复盘下来&#xff0c;并非是错误的使用了completefuture&#xff0c;而是一些开发时很难意识到的坑。 背景 用户反馈通过应用A使用ota批量升级设备时存在概率…

文字游侠AI:一键创作头条爆文!(附渠道和保姆级教程)

在互联网的迅猛发展中&#xff0c;自媒体已然成为一条崭新的职业路径&#xff0c;吸引着越来越多的人通过各类平台分享观点与知识&#xff0c;同时获取相应的收益。今日头条便是一个极为出色的自媒体平台&#xff0c;旗下的图文项目更是一条实现收益的有效途径。 对于众多非专业…

【SpringBoot + Vue 尚庭公寓实战】租期管理接口实现(四)

【SpringBoot Vue 尚庭公寓实战】租期管理接口实现&#xff08;四&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】租期管理接口实现&#xff08;四&#xff09;1、查询全部租期列表2、保存或更新租期信息3、根据ID删除租期 租期管理共有三个接口&#xff0c;分别是 保…

IP纯净度对跨境电商有影响吗?

当我们谈论代理IP时&#xff0c;通常会提到一个重要概念&#xff0c;那就是“IP纯净度”。 IP纯净度是指代理IP服务中所提供的IP地址的质量、干净程度和安全性&#xff0c;纯净度高的IP地址通常具备低恶意软件攻击的风险、良好的访问效果、稳定性和速度以及隐私保护等特点。在…

动态内存管理(malloc,calloc,realloc,free)+经典笔试题

动态内存管理 一. malloc 和 free1. malloc2. free 二. calloc三. realloc四.动态内存的错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态开辟内存忘记释放&…

python连接Mongodb数据库,报错:pymongo.errors.ServerSelectionTimeoutError

python连接mongdb数据库&#xff0c;本来是可以的&#xff0c;但是研发更换新的数据库后&#xff0c;一直报错&#xff1a;pymongo.errors.ServerSelectionTimeoutError&#xff0c;但是在其他人电脑上脚本执行成功。 详见报错截图&#xff1a; 在网上找了很久的解决方案&…

图标绘制软件draw.io中文安装包

Draw.io&#xff08;也称为Diagrams&#xff09;是一款功能强大的免费在线图表绘制工具。它支持绘制多种类型的图表&#xff0c;如流程图、UML图、组织结构图等&#xff0c;满足了从商务到工程设计的多领域需求。软件界面直观友好&#xff0c;操作简单&#xff0c;用户无需安装…

【网络基础1】

文章目录 学习目标一、网络基础11.网络的重要性2.osi7层模式3.协议和osi7层模型的关系4.数据的封装和解封装5.tcp的三次握手6.Ddos攻击讲解7.Tcp的四次挥手 二、网络基础21.文字编码2.IP地址的划分3.子网掩码4.同网段ip才能直接通信5.DNS解析6.DNS解析命令7.短域名为什么值钱8.…

docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器

文章目录 12345 1 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器。具体来说&#xff1a; docker ps&#xff1a;这个命令用于列出当前正在运行的容器。-l 或 --latest&#xff1a;这个选项告诉 docker ps 命令只显示最近一次创建的容器&#xff0c;不论该容器当前…

Python代码限定抽奖次数的方法

在许多应用场景中&#xff0c;抽奖活动需要限定参与次数以确保公平性和控制成本。本文将介绍如何使用Python代码实现抽奖次数的限定。我们将讨论基本的实现方法&#xff0c;并展示一个完整的代码示例。 基本思路 限定抽奖次数的基本思路是使用一个计数器来记录每个用户已经参…

png怎么变成jpg?教你3种方法一键批量转换

png怎么变成jpg&#xff1f;PNG转JPG在图像处理中扮演着重要的角色。除了能够显著减小文件大小&#xff0c;使图像更易于分享和传输外&#xff0c;这种转换还能确保图像在各种平台和设备上都能得到良好的展示效果。无论是网站加载速度的优化&#xff0c;还是移动设备上的流畅浏…

windows 系统通过 cmd 命令终止进程

windows 系统通过 cmd 命令终止进程 1、使用 netstat 命令查看特定端口的占用情况 例如&#xff0c;要查看端口号为 8015 的情况&#xff0c;可以执行以下命令&#xff1a; netstat -ano | findstr 8105此命令会显示所有占用端口 8105 的网络连接&#xff0c;并列出 PID&…

Shopee与Lazada卖家如何运用自养号测评稳定提升销量于评价

在跨境电商行业中&#xff0c;测评对于提高产品销量是个非常优秀的辅助方式。作为东南亚电商巨头&#xff0c;Shopee和Lazada这两大主流平台上&#xff0c;卖家竞争也尤为激烈&#xff0c;卖家们不断寻求有效的方法提升自己的产品销量。为了应对这一挑战&#xff0c;测评应运而…

若依框架改造多租户模式

当前使用版本3.6.416.20.2 (Currently using 64-bit executable)https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html 一、若依Cloud改为多租户模式 当前使用版本3.6.4&#xff0c;既然要改为多租户模式&#xff0c;多租户重点是什么&#xff0c;数据隔离&#xff0c;那么…

4、后端本地环境搭建

后端本地环境搭建 4.1 安装jdk 下载完成后双击安装的 jdk &#xff0c;点下一步&#xff0c;选择安装目录&#xff0c;一直点下一步&#xff0c;直到结束。 安装完成后同样需要配置环境变量 window s 搜索查看高级系统设置—— 高级 —— 环境变量 —— 系统变量 1、新建一…

java自动化之java基础03-09java基础之数组

数组 1、定义 数组是一种用于存储固定大小的同类型数据的数据结构 1&#xff09;固定大小 2&#xff09;同类型数据的存储 2、声明数组 1&#xff09;数据类型[] 变量名称&#xff1b; 例如&#xff1a;int[] numsArry; 2&#xff09;数据类型 变量名称[]; 例如&#xf…

Linux RS232

一、确认硬件信息 RS232&#xff1a; 引脚信息&#xff1a; 二、软件配置 1、pinctrl信息&#xff1a; 2、设备树节点&#xff1a; 3、修改串口支持的模式 三、驱动 bsp/drivers/uart/sunxi-uart.c 四、烧录测试 查看串口参数&#xff1a; stty -F /dev/ttyAS3 -a stty -F…

TqdmWarning: IProgress not found. Please update jupyter and ipywidgets.

jupyter notebook报错 在pycharm的terminal中 安装完成后就不会再报错了