记录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中的rjust()方法使用详解
May 19 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
详解Django rest_framework实现RESTful API
May 24 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python适合人工智能的理由和优势
Jun 28 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python基于win32api实现键盘输入
Dec 09 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
PHP安全配置
2006/12/06 PHP
PHP技术开发技巧分享
2010/03/23 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
Vue.js实现数据响应的方法
2018/08/13 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
回调函数的意义以及python实现实例
2017/06/20 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
python MD5加密的示例
2020/10/19 Python
成人教育自我鉴定
2013/11/01 职场文书
成立公司计划书
2014/05/07 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
大专生自荐书范文
2014/06/22 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL