首页 > 其他分享 >27. 日志

27. 日志

时间:2023-09-05 22:11:30浏览次数:35  
标签:输出 27 logging level 日志 logger 字典

一、日志的基本使用

logger.debug(msg, *args, **kwargs)        # 输出调试日志
logger.info(msg, *args, **kwargs)         # 输出消息日志
logger.warning(msg, *args, **kwargs)      # 输出警告日志
logger.error(msg, *args, **kwargs)        # 输出错误日志
logger.critical(msg, *args, **kwargs)     # 输出严重日志
logging.basicConfig(**kwargs)             # 配置日式输出信息

  在 Python 中系统内置的日志级别有六种:DEBUG、INFO、WARNING(默认值)、ERROR 以及 CRITICAL,系统会输出到控制台或者保存到日志文件的日志信息一定是等于或者高于当前等级的信息,例如当 level=logging.WARNING 时,只会输出或者保存 WARNING、ERROR 和 CRITICAL 级别的信息,其他级别的日志信息不会显示或保存,这也是 level 这个参数控制输出的意义所在。

日志级别 数值
logging.CRITICAL 50
logging.ERROR 40
logging.WARNING 30
logging.INFO 20
logging.DEBUG 10
logging.NOTSET 0

  定义山中日志输出格式,日志中可能用到的格式串如下:

格式串 描述
%(name)s Logger 的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调试日志输出函数的模式的完整路径名,可能没有
%(filename)s 调试日志输出函数的模块的文件名
%(module)s 调试日志输出函数的模块名
%(funcName)s 调试日志输出函数的函数名
%(lineno)s 调式日志输出函数的语句所在的代码行
%(created)s 当前时间,用 UNIX 标准的表示时间的浮点数表示
%(relativeCreated)d 输出日志信息时的,自 Logger 创建以来的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是 "年-月-日 时:分:秒,毫秒"
%(thread)d 线程 ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程 ID,可能没有
%(message)s 用户输出信息
import logging

logging.basicConfig(
    # 日志输出位置:1、中断 2、文件
    filename="access.log",          # 不指定,默认打印到中断

    # 日记格式:
    format="%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s",

    # 时间格式
    datefmt="%Y-%m-%d %H:%M:%S %p",

    # 日记级别:critical(50) error(40) warning(30) info(20) debut(10)
    level=10,
)

logging.debug("debug调试日志")
logging.info("info消息日志")
logging.warning("warning警告日志")
logging.error("error错误日志")
logging.critical("critical严重日志")

二、日志字典的使用

  Python 3.2 中引入的一种新的配置日志记录的方法--用字典来保存logging配置信息。这相对于上面所讲的基于配置文件来保存 logging 配置信息的方式来说,功能更加强大,也更加灵活,因为我们可把很多的数据转换成字典。

  传递给 dictConfig() 函数的字典对象只能包含下面这些 keys,其中 version 是必须指定的 key,其它 key 都是可选项:

key 名称 描述
version 必选项,其值是一个整数值,表示配置格式的版本,当前唯一可用的值就是 1。
formatters 可选项,其值是一个字典对香港,该字典对象每个元素的 key 为要定义的格式器名称,value 为格式器的配置信息组成的 dict。
filters 可选项,其值是一个字典对象,该字典对象每个元素的 key 为要定义的过滤器名称,value 为过滤器的配置信息组成的 dict。
handlers 可选项,其值是一个字典对象,该字典对象每个元素的 key 为要定义的处理器名称,value 为处理器的配置信息组成的 dict。
loggers 可选项,其值是一个字典对象,该字典对象每个元素的 key 为要定义的日志器名称,value 为日志器的配置信息组成的 dict。
root 可选项,这是 root logger 的配置信息,其值也是一个字典对象。除非咋定义其它 logger 时明确指定 propagate 值为 no,否则 root logger 定义的 handlers 都会被作用到其它 logger 上。
incremental 可选项,默认值为 False。该选项的意义在于,如果这里定义的对象已经存在,那么这里对这些对象的定义是应用到以存在的对象上。值为 False 表示,以存在的对象将会被重新定义。
disable_existing_loggers 可选项,默认值为 True。该选项用于指定是否禁用以存在的日志器 loggers,如果 incremental 的值为 True 则该选项将会被忽略。
# 定义日志输出格式开始
standard_format = "[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]" \
                "[%(levelname)s][%(message)s]"
simple_format = "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s"

# log配置字典
LOGGING_DIC = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        # 自定义的日志格式
        "standard": {
            "format": standard_format
        },
        "simple": {
            "format": simple_format
        },
    },
    "filters": {},                                              # 过滤日志
    # handlers是日记的接收者,不同的handler会将日志输出到不同的位置
    "handlers": {
        # 打印到终端的日志
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",                   # 打印到屏幕
            "formatter": "simple"
        },
        # 打印到文件的日志,收集info及以上的日志
        "default": {
            "level": "DEBUG",
            "class": "logging.handlers.RotatingFileHandler",    # 保存到文件
            "formatter": "standard",
            "filename": "access.log",                           # 日志文件文件
            "maxBytes": 1024*1024*5,                            # 日志文件大小,达到大小后生成新的日志文件
            "backupCount": 5,                                   # 日志文件的个数
            "encoding": "utf-8",                                # 日志文件的编码
        },
    },
    # loggers是日志的产生着,产生的日志会传递给handler然后控制输出
    "loggers": {
        # logging.getLogger(__name__)拿到的logger配置
        "用户交易": {
            # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            "handlers": ["default", "console"],  
            "level": "DEBUG",
            "propagate": False,                                 # 默认为True,向上(更高level的logger)传递
        },  

        # logging.getLogger(__name__)拿到的logger配置
        "": {
            # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            "handlers": ["default", "console"],  
            "level": "DEBUG",
            "propagate": False,                                 # 默认为True,向上(更高level的logger)传递
        },  
    },
}
import logging
import logging.config

logging.config.dictConfig(LOGGING_DIC)                         # logging模块加载字典中的配置

logger = logging.getLogger("用户交易")                          # 获取指定的日志生产者
logger.debug("订单生成")

# loggers配置中使用空字符串作为字典的键 兼容性最好
logger = logging.getLogger("常规操作")                          # 获取指定的日志生产者
logger.debug("用户登录")

标签:输出,27,logging,level,日志,logger,字典
From: https://www.cnblogs.com/kurome/p/17680969.html

相关文章

  • linux日志文件的查询方式
    cdlog到指定log日志文件目录ls查看当前文件存在的目录catjujube.log可以查看较小的日志文件vijujube.log查看较大的日志文件(常用)/(查询的字符)可以定位到这个字符的位置N继续向下检索:$回到日志文件的最底层可以用于从底层开始查找使用:$后配合使......
  • 解决代码使用CompletableFuture做异步时spring-cloud-starter-sleuth的日志追踪号为空
    产生问题原因就是异步调用,导致spanId和traceId丢失了@Async注解的异步调用是没问题的前提使用spring-cloud-starter-sleuthjar包版本2.2.8.RELEASE关于追踪号的xml配置为<pattern>%yellow(%date{yyyy-MM-ddHH:mm:ss.SSS})[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-B......
  • 《费曼学习法:理解更快、保留更高,27个高级学习模型》
    作者:彼得·霍林斯推荐指数:一般,但非常值得一读:缺点:条理不清晰:全书读完并不能确定27个高级学习模型是哪些;内容重复:前后章节一些内容是重复出现的,例如学习步骤;优点:观点清晰;技巧实用;  ......
  • C#下log4net日志记录使用实例完整教程
    C#下log4net日志记录使用实例完整教程1log4net1.1log4net简介1.2log4net源码下载1.3log4net源码编译1.3.1编译工具1.3.2编译步骤1.3.2.1解压log4net源码apache-log4net-source-2.0.10.zip1.3.2.2找到文件“……\log4......
  • plumelog介绍与应用-一个简单易用的java分布式日志系统
    官方文档:http://www.plumelog.com/zh-cn/docs/FASTSTART.html简介无代码入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志基于elasticsearch作为查询引擎高吞吐,查询效率高全程不占应用程序本地磁盘空间,免维护;对于项目透明,不影响项目本身运行无......
  • 【Python-装饰器】【示例】日志记录装饰器
    #一个简易的日志记录装饰器,用于记录函数执行信息deflog(func):defwrapper(*args,**kwargs):print(f"调用函数{func.__name__},参数:{args},{kwargs}")result=func(*args,**kwargs)print(f"函数{func}执行结果:{result}")retu......
  • tomcat 5日志配置笔记(解决中文乱码)
    作者:fbysss关键字:Tomcat日志环境:linux前言:采用默认的tomcat日志,无法解决中文信息输出乱码的问题。tomcat5中,可以使用log4j或者javalogging配置文件对日志输出进行配置。以下是相关试验记录。如果common/lib下没有common-logging.jar和log4j.jar输出正常的日志。catalina.out记录......
  • SIEM 中不同类型日志监控及分析
    安全信息和事件管理(SIEM)解决方案通过监控来自网络的不同类型的数据来确保组织网络的健康安全状况,日志数据记录设备上发生的每个活动以及整个网络中的应用程序,若要评估网络的安全状况,SIEM解决方案必须收集和分析不同类型的日志数据。什么是日志分析日志分析是调查收集的日志以识别......
  • 【转】最优日志系统,Log4j 还是 Logback?
    引言在Java项目开发中,一个正式的项目,一定离不开日志的输出,而常用的日志输出框架又绕不开Log4j和Loback。Log4jApacheLog4j是一种Java日志记录工具,它是ApacheSoftwareFoundation下的一个开源项目。Log4j旨在帮助程序员在其应用程序中记录日志,并且能够根据需要配置......
  • Linux日志管理经验总结(crontab+logrotate)
    Linux系统-部署-运维系列导航 日志管理目标日志的管理,一般包括两大部分日志内容,合理的日志内容(日志锚点,内容格式,等)可以为应用服务的执行记录、问题排查提供最有力的帮助日志存档规则,包括日志分割方式(按日期、按文件大小,等),日志存档数量,如只保存最近一个月,等对于自行开发的......