python中logging日志模块

模块化设计
logger:日志器,提供程序可使用的接口
handler:处理器,用于写入日志文件并输出到指定位置,如文件、控制台
filter:过滤器,用于输出符合指定条件的日志记录
formatter:各时期,决定日志记录的输出格式

日志级别
DEBUG:最低级别,追踪问题时使用
INFO:记录程序中一般事件的信息,或确认一切工作正常
WARNING:记录信息,用于警告
ERROR:用于记录程序报错信息
CRITICAL:最高级别,记录可能导致程序崩溃的错误

实际使用步骤
创建日志器looger(logging.getLogger())->设置日志级别(setlevel(loging.DEBUG))->创建日志文件->设置日志格式->为日志器添加处理方式

日志输出格式字符串

%(name)s:logging的名字
%(message)s:用户输出的消息
%(asctime)s:输出时间
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前事件;用UNIX标准表示时间的浮点数
%(relative:Created)d输出日志信息时;自logger创建以来的毫秒数
%(thread)d:线程ID
%(threadName)s:线程名可能没有
%(process)d:进程ID可能没有

基本用法

import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()

logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')

实际用法

# import logging
# from logging.handlers import RotatingFileHandler
# # 创建日志器,
# logger = logging.getLogger()
# # 设置日志级别
# logger.setLevel(logging.DEBUG)
# # 创建处理器对象,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
# file_log_handler = RotatingFileHandler("log/test.log", maxBytes=1024 * 1024 * 100, backupCount=10)
# # 创建日志记录的格式
# formatter = logging.Formatter('%(levelname)s %(asctime)s %(filename)s:第%(lineno)d行: %(message)s')
# # 设置日志记录格式
# file_log_handler.setFormatter(formatter)
# stream_handler = logging.StreamHandler()  # 往屏幕上输出
# # 为日志器添加处理方式
# logger.addHandler(file_log_handler)
# logger.addHandler(stream_handler)
# logger.debug("这条日志是debug级别")
# logger.info("这条日志是info级别")
# logger.warning("这条日志是warning级别")
# logger.error("这条日志是error级别")
# logger.critical("这条日志是critical级别")

#优化,封装,方便需要使用时,直接调用,将日志按照日期分别放到不同文件,日志名称以时间命名

import logging,os,time
class Logging():
    def make_log_dir(self,dirname='logs'): #创建日志存放目录,并返回目录的路径
        now_dir=os.path.dirname(__file__)
        # father_path=os.path.split(now_dir)[0]
        path=os.path.join(now_dir,dirname)
        path=os.path.normpath(path) #os.path.normpath()方法规范路径输出格式
        if not os.path.exists(path):
            os.makedirs(path)
        return path

    def get_log_filename(self): #创建文件文件名格式,便于区分每天的日志
        filename="{}.log".format(time.strftime("%Y-%m-%d",time.localtime()))
        filename=os.path.join(self.make_log_dir(),filename)
        filename=os.path.normpath(filename)
        return filename

    def log(self,level='DEBUG'): #生成日志的主方法,传入对哪些级别以上的日志进行处理
        logger=logging.getLogger()
        logger.setLevel(level)
        if not logger.handlers:
            sh=logging.StreamHandler()
            fh=logging.FileHandler(filename=self.get_log_filename(),mode='a',encoding="utf-8")
            fmt=logging.Formatter("%(asctime)s-%(levelname)s-%(filename)s-line:%(lineno)d-message:%(message)s")
            sh.setFormatter(fmt=fmt)
            fh.setFormatter(fmt=fmt)
            logger.addHandler(fh)
            logger.addHandler(sh)
        return logger
if __name__=='__main__':
    logger=Logging().log(level="ERROR")
    logger.debug("debug-111111")
    logger.info("info-2222222")
    logger.error("error-333333")
    logger.warning("warning-4444444")
    logger.critical("critical-555555")

其他日志模块
第三方库 loguru
pip3 install loguru
参考:https://www.jb51.net/article/268300.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: logging模块Python标准库的一个模块,用于记录程序运行时的日志信息。它提供了一种灵活的方式来控制日志记录的级别、格式和输出目标,可以将日志信息输出到控制台、文件、网络等不同的位置。使用logging模块可以帮助我们更好地理解程序的运行情况,快速定位问题并进行调试。在使用logging模块时,我们需要定义一个Logger对象,然后使用它来记录日志信息。Logger对象可以设置多个Handler对象,每个Handler对象可以设置不同的日志级别和输出目标。日志级别包括DEBUG、INFO、WARNING、ERROR和CRITICAL五个级别,级别越高,记录的信息越重要。在记录日志信息时,我们可以使用不同的格式化字符串来控制日志信息的输出格式,例如时间、级别、模块名、函数名等。除了基本的日志记录功能外,logging模块还提供了一些高级功能,例如日志回滚、日志过滤、日志轮换等,可以根据实际需求进行配置。 ### 回答2: logging模块Python内置的一个用于输出日志信息的模块,通过它我们可以记录程序运行时产生的各种信息,帮助我们了解程序运行过程的动态情况,有助于快速排查问题和系统优化。 logging模块的主要特点: 1.提供了5种不同的日志级别控制,从低到高分别是DEBUG、INFO、WARNING、ERROR、CRITICAL,不同级别的日志信息可以按照需求进行输出和记录。 2.可以灵活配置日志的输出位置和格式,包括控制台输出、文件输出和邮件输出等,还可以通过配置格式化器进行日志信息格式化。 3.支持输出、记录异常信息及堆栈信息等,便于排查问题。 以下是logging模块的一些常用方法及用法: 1. basicConfig():进行一些基本配置,如日志级别、输出格式、输出位置等,通常在程序入口处调用。 2. getLogger():获取一个logger实例,可以用来输出日志信息,常用于创建模块级别的日志记录器。 3. setLevel():设置日志级别,只有比设置级别高的日志才会输出。 4. addHandler():添加处理器,将日志信息发送到指定的输出位置,比如文件、控制台等。 5. Formatter():定义日志信息的格式化方式,可以定义不同的格式化字符串实现不同的输出格式。 6. 异常处理:可以使用try-except语句结合logging模块来记录异常信息及堆栈信息,方便排查问题。 7. 多模块日志处理:使用getLogger()方法可以创建多个记录器,为不同的模块或功能区分开来,方便排查问题。 总之,logging模块Python非常有用的一个模块,它可以帮助我们记录程序运行的各种信息,并提供各种定制化的输出方式,有助于提高代码的可读性和可维护性,快速排查问题。同时,也要注意在实际使用避免频繁输出日志信息导致程序性能下降。 ### 回答3: Pythonlogging模块是一个优秀的记录日志的方式,可以将程序任何需要记录的信息输出到特定的位置,如控制台、文件或者网络。logging模块提供了强大的日志功能,可以将输出日志进行分级、格式化、过滤、存储等多种功能,可以让开发者方便地实现程序日志输出。下面将对logging模块的详细使用进行介绍。 logging模块的主要概念包括Logger、Handler、Formatter。Logger表示一个日志记录器对象,可以设定日志记录级别、输出地点和格式;Handler表示在哪里输出日志,不同Handler可以输出到不同位置;Formatter表示日志输出的格式。 使用logging模块记录日志需要以下步骤: 1. 创建一个Logger对象,用于记录日志信息。Logger对象可以指定名字,如果不指定,会使用rootLogger。 ```python import logging logger = logging.getLogger("mylogger") ``` 2. 设置Logger的级别,只有高于该级别的日志才会输出。默认级别为warning。 ```python logger.setLevel(logging.DEBUG) ``` 3. 创建Handler对象,用于将日志信息输出到指定位置。常用的Handler有StreamHandler(输出到控制台)、FileHandler(输出到文件)、HTTPHandler(输出到网络)等。 ```python stream_handler = logging.StreamHandler() file_handler = logging.FileHandler("log.txt") ``` 4. 设置Handler的级别,如果不设置,默认级别为warning。 ```python stream_handler.setLevel(logging.INFO) file_handler.setLevel(logging.ERROR) ``` 5. 创建Formatter对象,用于确定日志信息的输出格式。 ```python formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler.setFormatter(formatter) file_handler.setFormatter(formatter) ``` 6. 将Handler添加到Logger对象。 ```python logger.addHandler(stream_handler) logger.addHandler(file_handler) ``` 7. 使用Logger对象记录日志。 ```python logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 日志级别从高到低为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET。 最后,logging模块还可以进行日志的过滤、日志的旋转等操作,可以根据实际需求进行设置。总的来说,logging模块Python程序提供了一种方便、灵活的日志记录方式,可以帮助开发者更好地了解程序的运行状态,方便地进行调试和问题排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试运维小猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值