• Python中的logging模块


      logging模块是Python内置的标准模块,主要用于输出运行日志,可以通过设置不同的日志等级,实现日志文件保存,输出路径以及输出形式

      日志级别

      默认等级日志级别为WARNING,低于该等级的均不会被打印

      级别  数值

      CRITICAL  50

      ERROR  40

      WARNING  30

      INFO  20

      DEBUG  10

      NOTSET  0

      1、简单使用

      import logging

      logging.debug("debug---message")

      logging.info("info---message")

      logging.warning("warning---message")

      logging.error("error---message")

      logging.critical("critical---message")

      运行结果:

      WARNING:root:warning---message

      ERROR:root:error---message

      CRITICAL:root:critical---message

      2、日志等级-日志格式-输出文件

      设置等级-设置为DEBUG模式

      logging.basicConfig(level=logging.DEBUG)

      日志格式

      默认格式为(日志级别:Logger名称:日志内容)

      属性  格式  英文描述  中文翻译

      name  %(name)s  Name of the logger used to log the call.  用于记录调用的日志程序的名称,logger的名称,默认为root。

      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’).  消息的文本日志级别(‘DEBUG’、‘INFO’、‘WARNING’、‘ERROR’、‘CRITICAL’)。

      pathname  %(pathname)s  Full pathname of the source file where the logging call was issued (if available).  发出日志调用的源文件的完整路径名(如果可用)。

      levelno  %(levelno)s  Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL).  消息的数字日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)。

      module  %(module)s  Filename portion of pathname.  调用日志的模块名(文件名的名称部分)。

      lineno  %(lineno)d  Source line number where the logging call was issued (if available).  发出日志调用的源行号(如果可用)。

      created  %(created)f  Time when the LogRecord was created (as returned by time.time()).  创建日志记录的时间(由Time . Time()返回)。

      relativeCreated  %(relativeCreated)d  Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded.  创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间。

      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).  创建日志记录时的人类可读时间。默认情况下,它的形式是“2003-07-08 16:49:45 896”(逗号后面的数字是时间的毫秒部分)。

      process  %(process)d  Process ID (if available).  进程ID(如果可用)。

      processName  %(processName)s  Process name (if available).  进程名(如果可用)。

      thread  %(thread)d  Thread ID (if available).  线程ID(如果可用)。

      threadName  %(threadName)s  Thread name (if available).  线程名字(如果可用)。

      message  %(message)s  The logged message, computed as msg % args. This is set when Formatter.format() is invoked.  已记录的消息,计算为msg % args。这是在调用format .format()时设置的。

      示例1(name、filename、funcName、levelname、levelno)

      import logging

      fmt = 'name(调用日志程序的名称:默认root):%(name)s filename(调用日志输出函数的文件名):%(filename)s funcName(调用日志输出函数的函数名):%(funcName)s levelname(日志等级-文字):%(levelname)s levelno(日志等级-数字):%(levelno)s pathname(日志调用的源文件的完整路径名):%(pathname)s '

      logging.basicConfig(level=logging.DEBUG, format=fmt)

      logging.debug("这是一条调试信息")

      logging.info("这是一条普通信息")

      logging.warning("这是一条警告信息")

      # 指定logger使用的名字,不使用默认的root

      logger = logging.getLogger("新的logger名字")

      logger.error("这是一条错误信息")

      def my_critical():

      logging.critical("这是一条严重错误信息")

      my_critical()

      结果:

      结果:

      name(调用日志程序的名称:默认root):root filename(调用日志输出函数的文件名):main.py funcName(调用日志输出函数的函数名): levelname(日志等级-文字):DEBUG levelno(日志等级-数字):10 pathname(日志调用的源文件的完整路径名):C:/Users/LGY/PycharmProjects/web/main.py

      name(调用日志程序的名称:默认root):root filename(调用日志输出函数的文件名):main.py funcName(调用日志输出函数的函数名): levelname(日志等级-文字):INFO levelno(日志等级-数字):20 pathname(日志调用的源文件的完整路径名):C:/Users/LGY/PycharmProjects/web/main.py

      name(调用日志程序的名称:默认root):root filename(调用日志输出函数的文件名):main.py funcName(调用日志输出函数的函数名): levelname(日志等级-文字):WARNING levelno(日志等级-数字):30 pathname(日志调用的源文件的完整路径名):C:/Users/LGY/PycharmProjects/web/main.py

      name(调用日志程序的名称:默认root):新的logger名字 filename(调用日志输出函数的文件名):main.py funcName(调用日志输出函数的函数名): levelname(日志等级-文字):ERROR levelno(日志等级-数字):40 pathname(日志调用的源文件的完整路径名):C:/Users/LGY/PycharmProjects/web/main.py

      name(调用日志程序的名称:默认root):root filename(调用日志输出函数的文件名):main.py funcName(调用日志输出函数的函数名):my_critical levelname(日志等级-文字):CRITICAL levelno(日志等级-数字):50 pathname(日志调用的源文件的完整路径名):C:/Users/LGY/PycharmProjects/web/main.py

      示例2(module、lineno、created、asctime、message)

      import logging

      import time

      fmt = 'module(调用日志所在的模块名):%(module)s lineno(日志调用的行号):%(lineno)d created(日志记录的时间):%(created)f relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):%(relativeCreated)d asctime(可视化时间):%(asctime)s message:(打印的信息):%(message)s '

      logging.basicConfig(level=logging.DEBUG, format=fmt)

      logging.debug("这是一条调试信息")

      logging.info("这是一条普通信息")

      time.sleep(1)

      logging.warning("这是一条警告信息")

      logging.error("这是一条错误信息")

      logging.critical("这是一条严重错误信息")

      结果:

      module(调用日志所在的模块名):main lineno(日志调用的行号):8 created(日志记录的时间):1559121316.796984 relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):0 asctime(可视化时间):2019-05-29 17:15:16,796 message:(打印的信息):这是一条调试信息

      module(调用日志所在的模块名):main lineno(日志调用的行号):9 created(日志记录的时间):1559121316.796984 relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):0 asctime(可视化时间):2019-05-29 17:15:16,796 message:(打印的信息):这是一条普通信息

      module(调用日志所在的模块名):main lineno(日志调用的行号):11 created(日志记录的时间):1559121317.797309 relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):1000 asctime(可视化时间):2019-05-29 17:15:17,797 message:(打印的信息):这是一条警告信息

      module(调用日志所在的模块名):main lineno(日志调用的行号):12 created(日志记录的时间):1559121317.797309 relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):1000 asctime(可视化时间):2019-05-29 17:15:17,797 message:(打印的信息):这是一条错误信息

      module(调用日志所在的模块名):main lineno(日志调用的行号):13 created(日志记录的时间):1559121317.797309 relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):1000 asctime(可视化时间):2019-05-29 17:15:17,797 message:(打印的信息):这是一条严重错误信息

      示例3(thread、threadName)

      import logging

      import threading

      import time

      fmt = ' message:(打印的信息):%(message)s thread(线程ID):%(thread)d threadName(线程名字):%(threadName)s'

      logging.basicConfig(level=logging.DEBUG, format=fmt)

      def my_debug(num, name=None):

      print(num)

      print(name)

      logging.debug("这是一条调试信息")

      def my_info():

      logging.info("这是一条普通信息")

      def my_log():

      logging.warning("这是一条警告信息")

      logging.error("这是一条错误信息")

      logging.critical("这是一条严重错误信息")

      # 创建线程1

      t1 = threading.Thread(target=my_debug, args=(100,), kwargs={"name": "debug"},name="线程1")

      # 创建线程2

      t2 = threading.Thread(target=my_info,name="线程2")

      # 创建线程3

      t3 = threading.Thread(target=my_log,name="线程3")

      t1.start()

      t2.start()

      t3.start()

      结果:无锡看妇科的医院 http://www.ytsgfk120.com/

      message:(打印的信息):这是一条调试信息 thread(线程ID):17428 threadName(线程名字):线程1

      message:(打印的信息):这是一条普通信息 thread(线程ID):10596 threadName(线程名字):线程2

      100

      debug

      message:(打印的信息):这是一条警告信息 thread(线程ID):7120 threadName(线程名字):线程3

      message:(打印的信息):这是一条错误信息 thread(线程ID):7120 threadName(线程名字):线程3

      message:(打印的信息):这是一条严重错误信息 thread(线程ID):7120 threadName(线程名字):线程3

      示例4(process、processName)

      import logging

      import multiprocessing

      import time

      fmt = ' message:(打印的信息):%(message)s process(进程ID):%(process)d processName(进程名字):%(processName)s'

      logging.basicConfig(level=logging.DEBUG, format=fmt)

      def my_debug(num, name=None):

      print(num)

      print(name)

      logging.debug("这是一条调试信息")

      def my_info():

      logging.info("这是一条普通信息")

      def my_log():

      logging.warning("这是一条警告信息")

      logging.error("这是一条错误信息")

      logging.critical("这是一条严重错误信息")

      if __name__ == '__main__':

      # 创建进程1

      p1 = multiprocessing.Process(target=my_debug, args=(100,), kwargs={"name": "小花"}, name="进程1")

      p1.start()

      p2 = multiprocessing.Process(target=my_info,name="进程2")

      p2.start()

      p3 = multiprocessing.Process(target=my_log,name="进程2")

      p3.start()

      结果:

      100

      message:(打印的信息):这是一条调试信息 process(进程ID):9920 processName(进程名字):进程1

      小花

      message:(打印的信息):这是一条普通信息 process(进程ID):8016 processName(进程名字):进程2

      message:(打印的信息):这是一条警告信息 process(进程ID):12240 processName(进程名字):进程2

      message:(打印的信息):这是一条错误信息 process(进程ID):12240 processName(进程名字):进程2

      message:(打印的信息):这是一条严重错误信息 process(进程ID):12240 processName(进程名字):进程2

      3、basicConfig参数详解-输出文件

      常用参数介绍

      filename : 指定log文件生成的位置

      filemode: 如果指定文件名,默认以“a”(追加)模式打开

      format: 为处理程序使用指定的格式字符串

      datefmt: 使用time.strftime()所接受的指定日期/时间格式。

      level: 将根记录器级别设置为指定的级别。

      默认Python的logging模块是将日志打印等到标准输出中-控制台中

      import logging

      format = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'

      logging.basicConfig(filename="my.log", filemode="a", format=format, datefmt="%Y-%m-%d %H:%M:%S", level=logging.DEBUG, )

      logging.debug("这是一条调试信息")

      logging.info("这是一条普通信息")

      logging.warning("这是一条警告信息")

      logging.error("这是一条错误信息")

      logging.critical("这是一条严重错误信息")

      my.log(以utf-8模式打开显示乱码,可以利用pycharm转为GB2313即可正常显示中文)

      2019-05-31 10:12:29 DEBUG [root] [main.py(:5)] - 这是一条调试信息

      2019-05-31 10:12:29 INFO [root] [main.py(:6)] - 这是一条普通信息

      2019-05-31 10:12:29 WARNING [root] [main.py(:7)] - 这是一条警告信息

      2019-05-31 10:12:29 ERROR [root] [main.py(:8)] - 这是一条错误信息

      2019-05-31 10:12:29 CRITICAL [root] [main.py(:9)] - 这是一条严重错误信息

  • 相关阅读:
    使用线程池对应用程序产生线程个数与占用CPU时间的影响
    枚举类型解析
    性能监视器的简单使用
    WCF 承载服务
    ManulResetEvent与AutoResetEvent
    获取当前目录的上级目录
    WCF 异步调用
    适配器设计模式
    控制控制台自身的最大化最小化
    代码自动生成技术相关介绍
  • 原文地址:https://www.cnblogs.com/djw12333/p/11425018.html
Copyright © 2020-2023  润新知