记录Python脚本的运行日志的方法


Posted in Python onJune 05, 2019

一、logging模块

Python中有一个模块logging,可以直接记录日志

#  日志级别
# CRITICAL 50
# ERROR  40
# WARNING 30
# INFO   20
# DEBUG  10

logging.basicConfig()函数中的具体参数:

filename:   指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中;
filemode:   文件打开方式,在指定了filename时使用这个参数,默认值为“w”还可指定为“a”;
format:      指定handler使用的日志显示格式;
datefmt:    指定日期时间格式。,格式参考strftime时间格式化(下文)
level:        设置rootlogger的日志级别
stream:     用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
                  若同时列出了filename和stream两个参数,则stream参数会被忽略。

 format参数中可能用到的格式化信息:

%(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 用户输出的消息

二、logging模块测试

1、打印日志到标准输出中

import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')

输出结果

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:/pyworkpeace/tupian.py 'https://www.tianyancha.com/login'
WARNING:root:warning message

Process finished with exit code 0

可以看出默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志。默认的日志的格式为:

日志级别:Logger名称:用户输出消息

2、将日志文件输入到文件中

import os
logging.basicConfig(filename=os.path.join(os.getcwd(),'log.txt'),level=logging.DEBUG)
logging.debug('this is a message')

运行这三行代码后会在安装Python的目录中出现一个log.txt文件,文件内容

DEBUG:root:this is a message
DEBUG:root:debug message

3、自定义格式,输出日志文件

# -*-coding:utf-8-*-

import logging


def console_out(logFilename):
  ''''' Output log to file and console '''
  # Define a Handler and set a format which output to file
  logging.basicConfig(
    level=logging.DEBUG, # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
    datefmt='%Y-%m-%d %A %H:%M:%S', # 时间
    filename=logFilename, # log文件名
    filemode='w') # 写入模式“w”或“a”
  # Define a Handler and set a format which output to console
  console = logging.StreamHandler() # 定义console handler
  console.setLevel(logging.INFO) # 定义该handler级别
  formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') # 定义该handler格式
  console.setFormatter(formatter)
  # Create an instance
  logging.getLogger().addHandler(console) # 实例化添加handler

  # Print information       # 输出日志级别
  logging.debug('logger debug message')
  logging.info('logger info message')
  logging.warning('logger warning message')
  logging.error('logger error message')
  logging.critical('logger critical message')


if __name__ == "__main__":
  console_out('logging.log')

输出结果:

此时也会自动生成一个日志文件,日志文件和运行文件在同一个文件夹中,文件名logging.log

2017-10-23 Monday 11:37:59 hgghf : DEBUG logger debug message
2017-10-23 Monday 11:37:59 hgghf : INFO logger info message
2017-10-23 Monday 11:37:59 hgghf : WARNING logger warning message
2017-10-23 Monday 11:37:59 hgghf : ERROR logger error message
2017-10-23 Monday 11:37:59 hgghf : CRITICAL logger critical message

修改输出路径:

filename='/tmp/test1.log', # log文件名

当将脚本中这行代码换一下,那么我们输出日志的路径地址就换成了D:\tmp

下面的方式同样可以达到上述结果

 4、自定义输出位置

import logging 
logging.basicConfig(level=logging.DEBUG, 
          format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', 
          datefmt='%a, %d %b %Y %H:%M:%S', 
          filename='/tmp/test.log', 
          filemode='w') 
 
logging.debug('debug message') 
logging.info('info message') 
logging.warning('warning message') 
logging.error('error message') 
logging.critical('critical message')

由于运行脚本放在D:\pyworkpeace\下,输出文件在D盘tmp文件夹下test.log,内容如下:

Mon, 23 Oct 2017 15:00:05 tupian.py[line:11] DEBUG debug message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:12] INFO info message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:13] WARNING warning message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:14] ERROR error message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:15] CRITICAL critical message

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
python定时关机小脚本
Jun 20 Python
python实现自动发送邮件
Jun 20 Python
Win8下python3.5.1安装教程
Jul 29 Python
Python中dict和set的用法讲解
Mar 28 Python
Python jieba库用法及实例解析
Nov 04 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 #Python
分享8个非常流行的 Python 可视化工具包
Jun 05 #Python
Django组件cookie与session的具体使用
Jun 05 #Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 #Python
python3下载抖音视频的完整代码
Jun 05 #Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 #Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 #Python
You might like
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
德劲1102收音机的打理维修案例
2021/03/02 无线电
php 网上商城促销设计实例代码
2012/02/17 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
实名检举信范文
2015/03/02 职场文书