Python日志模块logging基本用法分析


Posted in Python onAugust 23, 2018

本文实例讲述了Python日志模块logging基本用法。分享给大家供大家参考,具体如下:

1. 基础用法

python提供了一个标准的日志接口,就是logging模块。日志级别有DEBUGINFOWARNINGERRORCRITICAL五种(级别依次升高),分别对应的函数为debug()info()warning()error()critical()

>>> import logging
>>> logging.debug("ni hao")
>>> logging.info("ni hao2")
>>> logging.warning("ni hao")
WARNING:root:ni hao
>>> logging.error("ni hao")
ERROR:root:ni hao
>>> logging.critical("ni hao")
CRITICAL:root:ni hao
>>>

可以发现debug()info()方法没有显示任何信息,这是因为默认的日志级别是WARNING,所以低于此级别的日志不会记录。

可以利用函数basicCinfig修改日志级别

>>> import logging
>>> logging.basicConfig(level=logging.INFO)
>>> logging.info("nihao")
INFO:root:nihao
>>> logging.debug("dfasl")
>>> logging.basicConfig(level=logging.DEBUG)
>>> logging.info(4)
INFO:root:4
>>>

basicConfig()函数还可以定义更多的内容,如

logging.basicConfig(format=log_format,datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG)

举例

import logging
log_format = '%(filename)s %(funcName)s %(asctime)s %(message)s'
log_filename = "logging_test.log"
logging.basicConfig(filename=log_filename, format=log_format, datefmt='%Y-%m-%d %H:%M:%S:%S %p', filemode='w', level=logging.INFO)
logging.warning("warning###########")
logging.warning("error@@@@@@@@@@@@@@")
logging.error("error~~~~~~~~~~~~~~~~")

结果(输出文件“logging_test.log”内容)

del.py <module> 2015-04-30 16:29:02:02 PM warning
del.py <module> 2015-04-30 16:29:02:02 PM error
del.py <module> 2015-04-30 16:29:02:02 PM error

logging.basicConfig函数各参数

  • filename: 指定日志文件名
  • filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
  • format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
    •     %(levelno)s: 打印日志级别的数值
    •     %(levelname)s: 打印日志级别名称
    •     %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    •     %(filename)s: 打印当前执行程序名
    •     %(funcName)s: 打印日志的当前函数
    •     %(lineno)d: 打印日志的当前行号
    •     %(asctime)s: 打印日志的时间
    •     %(thread)d: 打印线程ID
    •     %(threadName)s: 打印线程名称
    •     %(process)d: 打印进程ID
    •     %(message)s: 打印日志信息
  • datefmt: 指定时间格式,同time.strftime()
  • level: 设置日志级别,默认为logging.WARNING
  • stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

注:日志的设置是使用basicConfig()方法,日志写入文件的默认方式是‘a',即“追加”,如果想覆盖文件,使用filemode='w'

logging模块的功能非常强大,可以通过更加自由的接口,自定义出更复杂的日志形式。需要用到下面3种对象loggerformatterhandler 。以下介绍logger

2. logger

logger对象直接提供日志接口。

通过handler对象可以把日志内容写到不同的地方。

例:将日志同时输出到文件和屏幕

#coding: utf-8
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh = logging.FileHandler("test.log")
ch = logging.StreamHandler()
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)    #可以设置addHandler添加内容(fh、ch、fh+ch),从而设置输出位置
logger.addHandler(ch)
logger.error("error$$$$$$$$$$")
logger.debug("aaaaa**********")

3. 模块

#! /usr/bin/env python
# --*-- coding:utf-8 --*--
import os
import logging
import logging.handlers
#LOGGER = logging.getLogger(__name__)
def init_log(LOGGER, log_file_path):
  LOGGER.setLevel(logging.INFO)
  ch = logging.StreamHandler()
  ch.setLevel(logging.INFO)
  formatter = logging.Formatter("%(asctime)s %(levelname)s %(filename)s(%(lineno)d) %(message)s ", "%Y-%m-%d %H:%M:%S")
  ch.setFormatter(formatter)
  LOGGER.addHandler(ch)
  log_dir = os.path.dirname(log_file_path)
  if not os.path.isdir(log_dir):
    os.makedirs(log_dir)
  fh = logging.handlers.RotatingFileHandler(log_file_path, maxBytes=10*1024*1024, backupCount=9)
  fh.setLevel(logging.INFO)
  fh.setFormatter(formatter)
  LOGGER.addHandler(fh)
if __name__=="__main__":
  print "Unsupported in main module..."

注:logging.handlers.RotatingFileHandler

这个Handler可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。最后重新创建 chat.log,继续输出日志信息。【这样保证了chat.log里面是最新的日志】它的构造函数是:

RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]])

其中filename和mode两个参数和FileHandler一样。

  • maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
  • backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
python删除过期log文件操作实例解析
Jan 31 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
对python 命令的-u参数详解
Dec 03 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
Python编程flask使用页面模版的方法
Dec 28 Python
python实现广度优先搜索过程解析
Oct 19 Python
浅析Django中关于session的使用
Dec 30 Python
基于python检查矩阵计算结果
May 21 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
python lambda 表达式形式分析
Apr 03 Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
使用Python实现一个栈判断括号是否平衡
Aug 23 #Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 #Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 #Python
You might like
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
详解vue 命名视图
2019/08/14 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
Python面向对象类的继承实例详解
2018/06/27 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
python使用配置文件过程详解
2019/12/28 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
Python3监控疫情的完整代码
2020/02/20 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Django框架请求生命周期实现原理
2020/11/13 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
会计毕业生自我鉴定
2013/11/04 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书