• Python之logging模块


    logging是python标准库中的模块,用于给程序添加日志,借此方便我们回溯程序的执行过程。

    基本用法

    以下面代码为例,介绍logging模块的基本用法:

    import logging
    
    logging.basicConfig(filename="example.log", filemode="a", format="%(levelname)s:%(message)s", level=logging.DEBUG)
    
    logging.debug(">>>>>Log Message: %s, %s" % ("Hello", "I'm debug log"))
    logging.info(">>>>>Log Message: %s, %s" % ("Hello", "I'm info log"))
    logging.warning(">>>>>Log Message: %s, %s" % ("Hello", "I'm warning log"))
    logging.error(">>>>>Log Message: %s, %s" % ("Hello", "I'm error log"))
    logging.critical(">>>>>Log Message: %s, %s" % ("Hello", "I'm critical log"))

    该段代码会把日志输出到名为"example.log"的文件中,并规定了日志的输出格式及最低日志级别,输出结果如下:

    DEBUG:>>>>>Log Message: Hello, I'm debug log
    INFO:>>>>>Log Message: Hello, I'm info log
    WARNING:>>>>>Log Message: Hello, I'm warning log
    ERROR:>>>>>Log Message: Hello, I'm error log
    CRITICAL:>>>>>Log Message: Hello, I'm critical log 

    日志级别

    logging模块中初始定义了五个日志级别,如表格所示。由上到下,级别对应的严重程度依次增加。在文章开头的例子中,我们调用logging.basicConfig()配置了想要输出的日志最低级别为DEBUG,这意味着DEBUG及其以上等级的日志都会被输出。同理,如果我们只想输出ERROR及以上的日志,则令level=logging.ERROR即可。

    级别

    何时使用

    DEBUG

    细节信息,仅当诊断问题时适用。

    INFO

    确认程序按预期运行

    WARNING

    表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行

    ERROR

    由于严重的问题,程序的某些功能已经不能正常执行

    CRITICAL

    严重的错误,表明程序已不能继续执行

    LogRecord属性

    在logging.basicConfig()中,我们使用了format="%(levelname)s:%(message)s"来规定日志的输出格式。其中levelname和message都是LogRecord属性,它们能出现在format字符串中,令输出结果带上了日志等级名、日志消息。其他可以出现在format字符串中的内容,参见下表:

    属性名称

    格式

    描述

    args

    不需要格式化。

    The tuple of arguments merged into msg to produce message, or a dict whose values are used for the merge (when there is only one argument, and it is a dictionary).

    asctime

    %(asctime)s

    Human-readable time when the LogRecord was created. By default this is of the form '2003-07-08 16:49:45,896' (the numbers after the comma are millisecond portion of the time).

    created

    %(created)f

    Time when the LogRecord was created (as returned by time.time()).

    exc_info

    不需要格式化。

    Exception tuple (à la sys.exc_info) or, if no exception has occurred, None.

    filename

    %(filename)s

    Filename portion of pathname.

    funcName

    %(funcName)s

    Name of function containing the logging call.

    levelname

    %(levelname)s

    Text logging level for the message ('DEBUG''INFO''WARNING''ERROR''CRITICAL').

    levelno

    %(levelno)s

    Numeric logging level for the message (DEBUGINFOWARNINGERRORCRITICAL).

    lineno

    %(lineno)d

    Source line number where the logging call was issued (if available).

    message

    %(message)s

    The logged message, computed as msg args. This is set when Formatter.format() is invoked.

    module

    %(module)s

    模块 (filename 的名称部分)。

    msecs

    %(msecs)d

    Millisecond portion of the time when the LogRecord was created.

    msg

    不需要格式化。

    The format string passed in the original logging call. Merged with args to produce message, or an arbitrary object (see 使用任意对象作为消息).

    name

    %(name)s

    Name of the logger used to log the call.

    pathname

    %(pathname)s

    Full pathname of the source file where the logging call was issued (if available).

    process

    %(process)d

    进程ID(如果可用)

    processName

    %(processName)s

    进程名(如果可用)

    relativeCreated

    %(relativeCreated)d

    Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded.

    stack_info

    不需要格式化。

    Stack frame information (where available) from the bottom of the stack in the current thread, up to and including the stack frame of the logging call which resulted in the creation of this record.

    thread

    %(thread)d

    线程ID(如果可用)

    threadName

    %(threadName)s

    线程名(如果可用)

    输出方式 

    在logging.basicConfig()中,我们使用了filename="example.log", filemode="a"来令日志输出至某个文件。如果不带filename和filemode参数,则会把日志直接打印出来。filemode参数值默认为"a",意味着在原有日志的基础上,追加写新的日志;如果不想追加写新的日志,而是覆盖原有的日志,令filemode="w"即可。

    最后说明,本篇文章只对logging模块的基本用法做了介绍,logging模块还有更多强大的功能供使用,可以通过官方文档了解。

    参考资料


    作者:酌三巡

    感谢阅读,如需转载请注明出处!

  • 相关阅读:
    【Java多线程】Fork/Join 源码分析(三十一)
    【Java多线程】Fork/Join 框架(三十)
    【Java】 Iterator(迭代器)
    【Java多线程】ScheduledThreadPoolExecutor实现原理(二十九)
    【Java多线程】ScheduledThreadPoolExecutor详解(二十八)
    【Java多线程】Executor框架 (二十七)
    【Python基础编程252 ● 包 ● 使用import 包名 as 别名 语句导包】
    【Python基础编程251 ● 包 ● 使用from 包名 import * 语句导包】
    【Python基础编程250 ● 包 ● 导包的方式】
    【Python基础编程249 ● 包 ● 包的基本概念、作用和命名规则】
  • 原文地址:https://www.cnblogs.com/zhuosanxun/p/11367934.html
Copyright © 2020-2023  润新知