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()
实例日志如下:

















