【Python】日志模块logging

一.日志基础

1.什么是日志?

记录软件运行状态,几时几分,运行了什么模块,传递什么请求

2.日志的作用?

可以用来分析问题信息

3.日志等级?
  • [Debug]调式
  • [Error]:错误输出
  • [Warning]
  • [Critical]/[Fatal]
3.日志组成

日志收集器logger——系统默认是RootLogger

日志输出渠道handlers 控制台或者文件

二.示例

1.示例1
import logging


logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("crital")

结果:系统默认的日志收集器就是级别是warming级别起步的,所以输出的日志是从

WARNING:root:warning
ERROR:root:error
CRITICAL:root:crital
2.示例2

1.定义一个日志收集器并设置级别

my_logger = logging.getLogger("python")
my_logger.setLevel("DEBUG")

2.指定输出渠道

  • StreamHandler——控制台
  • FileHandler 输出指定文件,设定级别
ch_1 = logging.StreamHandler()
ch = logging.FileHandler("text.log",encoding="UTF-8")
ch.setLevel("DEBUG")

3.建立连接

my_logger.addHandler(ch)

my_logger.debug("debug")
my_logger.info("info")
my_logger.warning("warning")
my_logger.error("error")
my_logger.critical("crital")

最后日志的输出级别是收集器和输出渠道的交集

4.关闭连接

my_logger.removeFilter(ch)
my_logger.removeFilter(ch_1)
3.Formatter 格式化器

单个格式设定

%(levelname)s

python语言设定格式

formatter = logging.Formatter("%(levelname)s")

ch = logging.StreamHandler()
ch.setLevel("DEBUG")
ch.setFormatter(formatter)

Formatter常用日志格式

formatter = logging.Formatter("[%(asctime)s]-[%(levelname)s]-%(filename)s-%(name)s-日志信息:%(message)s")


[2019-03-02 14:29:25,005]-[DEBUG]-py_log.py-pyLog-日志信息:debug
[2019-03-02 14:29:25,005]-[INFO]-py_log.py-pyLog-日志信息:info
[2019-03-02 14:29:25,005]-[WARNING]-py_log.py-pyLog-日志信息:warning
[2019-03-02 14:29:25,005]-[ERROR]-py_log.py-pyLog-日志信息:error
[2019-03-02 14:29:25,005]-[CRITICAL]-py_log.py-pyLog-日志信息:crital

常用Formatter格式:

格式信息
%(name)sLogger的名字
%(levelno)s数字形式日志级别
%(levelname)s文本形式的日志级别

三.作业

  • 1:编写一个日志类,能够实现输出文件到指定文件和console
  • 2:结合配置文件类实现日志类的可配置,具体参考老师的代码以及视频
  • 3:结合日志类以及do_excel类,加上异常判断 与日志输出
1.使用方式

可以和配置文件结合起来使用
可以和try except异常处理结合起来使用

作业

配置:

[LOG]
#log测试类
logger_name = py_log
logger_level = DEBUG
output_file_name = log.log
output_file_level = DEBUG
formatter = [%%(asctime)s]-[%%(levelname)s]-%%(filename)s-日志信息:%%(message)s

代码:

# 1:编写一个日志类,能够实现输出文件到指定文件和console
# 2:结合配置文件类实现日志类的可配置,具体参考老师的代码以及视频
# 3:结合日志类以及do_excel类,加上异常判断 与日志输出

import logging
import configparser


class MyLogger(object):

    def __init__(self):
        self.cf = configparser.ConfigParser()
        self.cf.read("log.conf", encoding="UTF-8")
        self.logger_name = self.cf.get("LOG", "logger_name")
        self.logger_level = self.cf.get("LOG", "logger_level")
        self.output_file_name = self.cf.get("LOG", "output_file_name")
        self.output_file_level = self.cf.get("LOG", "output_file_level")
        self.formatter = self.cf.get("LOG", "formatter")

    def my_log(self, level, msg):
        my_logger = logging.getLogger(self.logger_name)
        my_logger.setLevel(self.logger_level)

        ch = logging.StreamHandler()
        ch_1 = logging.FileHandler(self.output_file_name, encoding="UTF-8")
        ch.setLevel(self.output_file_level)

        formatter = logging.Formatter(self.formatter)
        ch.setFormatter(formatter)
        ch_1.setFormatter(formatter)

        my_logger.addHandler(ch)
        my_logger.addHandler(ch_1)

        if level == "DEBUG":
            my_logger.debug(msg)
        elif level == "INFO":
            my_logger.info(msg)
        elif level == "WARNING":
            my_logger.warning(msg)
        elif level == "ERROR":
            my_logger.error(msg)
        else:
            my_logger.critical(msg)

        my_logger.removeFilter(ch_1)
        my_logger.removeFilter(ch)

    def debug(self, msg):
        self.my_log("DEBUG", msg)

    def info(self, msg):
        self.my_log("INFO", msg)

    def error(self, msg):
        self.my_log("ERROR", msg)

    def warning(self, msg):
        self.my_log("WARNING", msg)

    def critical(self, msg):
        self.my_log("CRITICAL", msg)


if __name__ == '__main__':
    my = MyLogger()
    my.error("报错了")

————————————————————————————————————愿你被世界温柔所待,996式的上班给自己带来的或许就是紧凑,以及忙碌之后的空虚感,又或许自己本身就是一个不服输的人,不甘心比别人差,逼着自己去做很多事,但实际上又不情愿。讨厌这样的人,又会不得不成为这样的人。
记得很久前玩SIM4,捏了一个娃,从青少年时候,不断练习技能,去社交,去赚钱,去提高知名度成为名人,选择社区中最好看的娃结婚生子,或许赚了很多钱,技能满级,最后到老年时光,看到他那没多少的人生期望点数,这又有什么用呢?
一直很喜欢SIM游戏,练习技能只要花时间就会提高的,无论天赋,想交的朋友只要不断友善就会提高好感度,不论什么职业都是受尊重也不会被歧视。
我们不怕努力二字,只怕努力后一无所获。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logging模块Python的内置模块,用于记录日志信息。它提供了一种灵活且可配置的方式,用于在应用程序中生成日志消息。通过使用logging模块,您可以根据不同的级别记录不同型的消息,并且可以将这些消息输出到不同的目标,如控制台、文件或网络。 要使用logging模块,您需要先导入它: ```python import logging ``` 然后,您可以配置日志记录器并开始记录消息。以下是一个简单的示例,演示了如何使用logging模块记录日志消息: ```python import logging # 配置日志记录器 logging.basicConfig(level=logging.DEBUG, filename='app.log', filemode='w', format='%(asctime)s - %(levelname)s - %(message)s') # 记录不同级别的日志消息 logging.debug('This is a debug message') logging.info('This is an info message') logging.warning('This is a warning message') logging.error('This is an error message') logging.critical('This is a critical message') ``` 在上面的示例中,我们首先使用`basicConfig()`方法配置了日志记录器。通过指定日志级别(例如`DEBUG`、`INFO`、`WARNING`、`ERROR`、`CRITICAL`),我们可以决定哪些级别的消息会被记录。我们还指定日志文件的名称和格式。 然后,我们使用`debug()`、`info()`、`warning()`、`error()`和`critical()`方法来记录不同级别的日志消息。 您还可以在应用程序的其他位置使用相同的日志配置,并使用相同的记录器对象来记录消息。这样,您就可以在整个应用程序中保持一致的日志记录方式。 希望这个例子可以帮助您了解如何使用logging模块进行日志记录。如果您有任何进一步的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值