程序代码篇---Python日志输出


文章目录

  • 前言
  • Python日志输出
    • python的logging日志库模块
      • (一)日志级别:
        • 1.DEBUG
        • 2.INFO
        • 3.WARNING
        • 4.ERROR
        • 5. CRITICAL
      • (二)logging模块中四个核心组成组件
        • 1.Logger
        • 2.Handler
        • 3.Formatter
        • 4.Level
        • 5.实例
        • 6.RotatingFileHandler日志处理器
  • 总结


前言

本文仅仅简单介绍了Python中日志输出管理。


Python日志输出

python的logging日志库模块

日志:跟踪程序运行时发生事件

(一)日志级别:

1.DEBUG

DEBUG:详细信息,通常用于诊断问题。当程序运行时,DEBUG级别的日志会记录程序执行的详细信息,对开发调试非常有用。(详细信息)

2.INFO

INFO:确认程序按预期运行。INFO级别的日志用来记录程序正常运行过程中的一些重要事件信息,但不涉及细节。(重要程序信息)

3.WARNING

WARNING:表明发生了意外,或者表明在不久的将来可能会出现潜在的问题。但是程序仍然可以正常工作。这类日志通常用于提醒开发者或维护者注意某些不太正常的情况。(存在不影响正常工作的不正常)

4.ERROR

ERROR:由于更严重的问题,软件无法执行一些功能。ERROR级别的日志用于记录程序运行时出现的错误,这些错误会导致程序的部分功能无法正常执行。(存在影响正常工作的不正常)

5. CRITICAL

CRITICAL:严重错误,表明程序本身可能无法继续运行。这是最严重的日志级别,表明程序遭遇了致命错误,需要立即采取措施。(严重错误信息)

(二)logging模块中四个核心组成组件

1.Logger

Logger是日志系统的入口点。它暴露了应用程序代码可以直接使用的接口。每个Logger都有一个名字,这个名字在配置日志和过滤日志时使用。
Logger可以完成以下功能:
向应用程序代码暴露几个方法,如debug(), info(), warning(), error()和critical(),用于记录相应级别的日志。
基于日志级别和过滤器,决定是否传递日志记录给Handler。
Logger可以具有层级关系,子Logger会继承父Logger的设置。

2.Handler

Handler负责发送日志消息到适当的目的地,比如控制台、文件、HTTP服务器等。每个Logger都可以有多个Handler,而每个Handler可以有不同的日志级别和格式化器。
Handler的几个常见类型包括:
StreamHandler:将日志输出到流,如sys.stdout、sys.stderr或任何类似文件的对象。
FileHandler:将日志输出到磁盘文件。
SocketHandler:将日志发送到TCP/IP套接字。
SMTPHandler:将日志发送到指定的电子邮件地址。

3.Formatter

Formatter用于指定日志记录的最终输出格式。每个Handler都可以有自己的Formatter,它定义了日志记录的布局。Formatter通常使用以下信息来格式化日志消息:

时间戳(%(asctime)s)
日志级别(%(levelname)s)
Logger的名字(%(name)s)
日志消息(%(message)s)
进程ID(%(process)d)
线程ID(%(thread)d)

例如,一个简单的Formatter配置可能如下所示:

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

4.Level

Level决定了Logger和Handler应该处理哪些日志消息。每个日志记录请求都有一个级别,Logger和Handler都设置了级别阈值,只有当请求的级别等于或高于阈值时,日志记录才会被处理。
以下是标准的日志级别:
DEBUG: 最详细的日志信息,用于诊断问题。(详细信息)
INFO: 确认程序按预期运行。(重要程序信息)
WARNING: 表明发生了意外,或表明在不久的将来可能会出现潜在的问题。(存在不影响正常运行的不正常)
ERROR: 由于更严重的问题,软件无法执行一些功能。(存在影响正常运行的不正常)
CRITICAL: 严重错误,表明程序本身可能无法继续运行。(严重错误信息)

5.实例
import logging
from logging.handlers import RotatingFileHandler

def setup_logger(log_file, log_level=logging.INFO):
    # 创建一个logger
    logger = logging.getLogger('MyLogger')
    logger.setLevel(log_level)

    # 创建一个handler,用于写入日志文件
    file_handler = RotatingFileHandler(log_file, maxBytes=1024*1024*5, backupCount=5)
    file_handler.setLevel(log_level)

    # 创建一个handler,用于将日志输出到控制台
    console_handler = logging.StreamHandler()
    console_handler.setLevel(log_level)

    # 创建一个formatter,用于定义日志的格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # 添加formatter到handler
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    # 添加handler到logger
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger

if __name__ == "__main__":
    # 设置日志文件路径和日志级别
    log_file_path = 'myapp.log'
    logger = setup_logger(log_file_path, logging.DEBUG)

    # 使用logger记录不同级别的日志
    logger.debug("This is a debug message.")
    logger.info("This is an info message.")
    logger.warning("This is a warning message.")
    logger.error("This is an error message.")
    logger.critical("This is a critical message.")

6.RotatingFileHandler日志处理器

当使用RotatingFileHandler时,日志信息会被写入到一个指定的文件中。一旦这个文件的大小达到设定的阈值(通过maxBytes参数指定)
RotatingFileHandler就会进行以下操作:
关闭当前正在写入的日志文件。
将当前日志文件重命名,通常是添加一个序号或者时间戳来区分。
创建一个新的日志文件,继续写入新的日志信息。
这个过程称为“轮转”。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Python中日志输出管理。

你可能感兴趣的:(程序代码篇,python,学习,数据挖掘,模块测试,性能优化,安全架构,人机交互)