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\t filename(调用日志输出函数的文件名):%(filename)s\t funcName(调用日志输出函数的函数名):%(funcName)s \t levelname(日志等级-文字):%(levelname)s\t levelno(日志等级-数字):%(levelno)s\t 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 \t lineno(日志调用的行号):%(lineno)d \t created(日志记录的时间):%(created)f \t relativeCreated(创建日志记录的时间(以毫秒为单位)相对于加载日志模块的时间):%(relativeCreated)d \t asctime(可视化时间):%(asctime)s\t 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 \t thread(线程ID):%(thread)d \t 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 \t process(进程ID):%(process)d \t 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)] - 这是一条严重错误信息

posted @ 2019-08-28 16:51  tiana_Z  阅读(228)  评论(0编辑  收藏  举报