简单用法

  1. import logging
  2. logging.warning("user [mufeng] attempted wrong password more than 3 times")
  3. logging.critical("server is down")

执行流程.gif

日志级别

数值越大,级别越高

  1. CRITICAL = 50
  2. FATAL = CRITICAL
  3. ERROR = 40
  4. WARNING = 30
  5. WARN = WARNING
  6. INFO = 20
  7. DEBUG = 10
  8. NOTSET = 0

level参数

参数值大于等于level才有效

  1. import logging
  2. logging.basicConfig(level=logging.INFO)
  3. logging.debug('i am debug')
  4. logging.info('i am info')
  5. logging.warning('i am warning')

执行流程.gif

日志文件

一般来说,日志会写到文件,因为写到内存有太多不确定性,如项目运行停止,机器断电或重启等故障

  1. import logging
  2. logging.basicConfig(filename='log.txt', level=logging.INFO)
  3. logging.debug('i am debug')
  4. logging.info('i am info')
  5. logging.warning('i am warning')

执行流程.gif

自定义日志格式

  1. import logging
  2. logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
  3. logging.warning('i am info')

执行流程.gif
除了加时间,还可以自定义一大堆格式,下表就是所有支持的格式

%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

同时输出日志到屏幕和文件

  1. import logging
  2. # create logger
  3. logger = logging.getLogger('TEST-LOG')
  4. logger.setLevel(logging.DEBUG)
  5. # create console handler and set level to debug
  6. ch = logging.StreamHandler()
  7. ch.setLevel(logging.DEBUG)
  8. # create file handler and set level to warning
  9. fh = logging.FileHandler("access.log")
  10. fh.setLevel(logging.WARNING)
  11. # create formatter
  12. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  13. # add formatter to ch and fh
  14. ch.setFormatter(formatter)
  15. fh.setFormatter(formatter)
  16. # add ch and fh to logger
  17. logger.addHandler(ch)
  18. logger.addHandler(fh)
  19. # 'application' code
  20. logger.debug('debug message')
  21. logger.info('info message')
  22. logger.warning('warn message')
  23. logger.error('error message')
  24. logger.critical('critical message')