Python logging

Reason is the light and the light of life.

Jerry Su Mar 28, 2019 1 mins

logging总结

Logger:记录器,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。

Handler :处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。

Filter :过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。

Formatter:格式化器, 指明了最终输出中日志记录的布局。

import logging
from logging import handlers
import sys

if True:
    # 1. 创建记录器
    logger = logging.getLogger()
    logger.setLevel(logging.INFO) # log日志总开关,默认WARNING级

    # 2. 创建handler
    # 2.1. 输出到终端
    console = logging.StreamHandler(sys.stdout) # 配置日志输出到控制台
    console.setLevel(logging.WARNING) # 设置输出到控制台的最低日志级别

    # 2.2. 输出到文件
    file_logging = logging.FileHandler("example.log") # 配置日志输出到文件
    file_logging.setLevel(logging.INFO)

    # 2.3. 和上面的FIleHandler差不多,只是handler对象可以管理文件大小,当文件大于指定的大小后,会自动将当前文件改名,然后重新创建一个新的同名文件继续输出
    # file_rotating_file = handlers.RotatingFileHandler("cat.log",maxBytes=1024,backupCount=3)
    # file_rotating_file.setLevel(logging.INFO)

    # 2.4. 和上面的handler有点类似,不过,它是通过判断文件大小来决定何时重新创建日志文件,而是间隔一定的时候自动创建日志文件。代表每7天备份文件
    # file_time_rotating = handlers.TimedRotatingFileHandler("app.log",when="s",interval=10,backupCount=5)
    # file_time_rotating.setLevel(logging.INFO)

    # 2.5. 输出到邮件
    # STMPHandler = logging.handlers.SMTPHandler(mailhost=('smtp.163.com', 25),
    #                                    fromaddr='jerrylsu@163.com',
    #                                    toaddrs=['sa517301@mail.ustc.edu.cn'],
    #                                    subject='Data - Issues',
    #                                    credentials=('jerrylsu','xinyu102'))
    # STMPHandler.setLevel(logging.WARNING)


    # 3. 创建格式化器
    formatter = logging.Formatter(fmt="%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s - %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p")  # 创建一个格式化对象
    console.setFormatter(formatter)  # 设置格式
    file_logging.setFormatter(formatter)
    # file_rotating_file.setFormatter(formatter)
    # file_time_rotating.setFormatter(formatter)
    # STMPHandler.setFormatter(FORMATTER)

    # 4. 添加处理器
    logger.addHandler(console)
    logger.addHandler(file_logging)
    # logger.addHandler(file_rotating_file)
    # logger.addHandler(file_time_rotating)
    # logger.addHandler(STMPHandler)

    # 5. 用户使用
    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")
    logger.critical("critical message")

log输出到文件除了上面的方式,还有一种便捷的方式:基于StreamHandler和重定位符>

$ python3 script.py --argv > log_path

输出到终端的log数据,重定位到log文件中。


Read more:

Related posts: