当前位置:   article > 正文

Python实现日志的记录_python日志记录

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、记录日志信息

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

2、标准流与文件流

  1. import logging
  2. from logging import StreamHandler
  3. from logging import FileHandler
  4. # 创建一个日志记录器
  5. logger = logging.getLogger(__name__)
  6. # 设置为DEBUG级别
  7. logger.setLevel(logging.DEBUG)
  8. # 标准流处理器,设置的级别为WARAING
  9. stream_handler = StreamHandler()
  10. stream_handler.setLevel(logging.WARNING)
  11. logger.addHandler(stream_handler)
  12. # 文件处理器,设置的级别为INFO
  13. file_handler = FileHandler(filename="test.log")
  14. file_handler.setLevel(logging.INFO)
  15. logger.addHandler(file_handler)
  16. logger.debug("this is debug")
  17. logger.info("this is info")
  18. logger.error("this is error")
  19. logger.warning("this is warning")

3、格式器

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

4、日志配置

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

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/810440
推荐阅读
相关标签
  

闽ICP备14008679号