记录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 04 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
Python实现修改IE注册表功能示例
May 10 Python
分享vim python缩进等一些配置
Jul 02 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
使用python实现飞机大战游戏
Mar 23 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 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 SFTP实现上传下载功能
2017/07/26 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
js验证表单大全
2006/11/25 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
javascript操作数组详解
2014/12/17 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
python3中for循环踩过的坑记录
2020/12/14 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
高中运动会广播稿
2014/01/21 职场文书
三年级音乐教学反思
2014/01/28 职场文书
业绩考核岗位职责
2014/02/01 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书