1、logging概述

    作为运维,在写些脚本方面也是无法避免的,那么脚本执行的日志输出,通过print输出到另外一个文档也不是很方便,所以如果是会Python语言的话,可以使用Python的logging模块记录脚本日志信息。

    logging日志框架:

  • Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志
  • Handlers: 决定将日志记录分配至正确的目的地
  • Filters:对日志信息进行过滤, 提供更细粒度的日志是否输出的判断
  • Formatters: 制定最终记录打印的格式布局

     logging模块中日志级别:

  • debug:调试日志(全部日志)
  • info:正常访问日志(正常运行日志)
  • warning:警示日志(不会影响程序运行日志)
  • error:错误日志(某些功能无法运行日志)
  • critical:级别最高日志(程序无法运行日志)
  • debug----》critical 是由低到高的日志级别

     日志常用格式:

  • %(asctime)s: 打印日志的时间
  • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
  • %(lineno)d: 打印日志的当前行号
  • %(levelname)s: 打印日志级别名称
  • %(filename)s: 打印当前执行程序名
  • %(thread)d: 打印线程ID
  • %(threadName)s: 打印线程名称
  • %(process)d: 打印进程ID
  • %(message)s: 打印日志信息

   常用函数--logging.basicConfig([**kwargs]):

  • filename:日志文件的保存路径
  • filemode:日志文件的打开模式,一般默认是‘a’
  • format:设置日志输出格式
  • datefmt:定义日期格式
  • level:设置日志的级别

 

2、logging实例

       以下脚本使用的Python版本为3.6,特别注意是“f‘’”的使用,Python2和Python3.6以下版本无法使用

import logging
import time

def logs(result, Level, logname):
···
1、logtime、logdir、logfile三个变量根据实际情况修改
2、在调用此函数时,需要传入三个参数
···
logtime = time.strftime("%Y-%m-%d")
logdir = "/opt/yw/log/"
logfile = f'{logdir}{logname}_{logtime}.log'
logging.basicConfig(
level=logging.DEBUG,
filename=f'{logfile}',
filemode='a',
format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s - %(message)s'

)
if Level == 'info':
logging.info(result)
elif Level == 'error':
logging.error(result)
else:
logging.debug(result)

if __name__ == '__main__':
logs()

实例日志如下:

【PYTHON】Python模块---logging日志_logging