python logging模块

python logging提供了标准的日志接口,python logging日志分为5个等级:

debug(), info(), warning(), error() and critical()

简单用法

import logging
logging.warning("warning.........")
logging.critical("server is down")

print:

WARNING:root:warning.........
CRITICAL:root:server is down

5个日志级别所代表的意思:

Level 说明
DEBUG Detailed information, typically of interest only when diagnosing problems.
INFO Confirmation that things are working as expected.
WARNING An indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERROR Due to a more serious problem, the software has not been able to perform some function.
CRITICAL A serious error, indicating that the program itself may be unable to continue running.

把日志写到文件里

import logging

logging.basicConfig(filename="log_test.log", level=logging.INFO) #此处定义了日志级别,INFO以及高于INFO的日志会被记录
logging.debug("debug..............")
logging.info("info..............")
logging.warning("warning...........")

结果:

我们把日志级别调整一下:

import logging

logging.basicConfig(filename="log_test.log", level=logging.DEBUG) #level 改为 debug
logging.debug("debug..............")
logging.info("info..............")
logging.warning("warning...........")

结果:

debug 级别的日志已经记录了。另外,日志的写入方式是追加,不会覆盖之前的日志。


自定义日志格式

日志格式参数:

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

上段代码看一下:

import logging

logging.basicConfig(filename="log_test.log",
level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(module)s - %(lineno)d %(message)s",
datefmt="%Y-%m-%d %I:%M:%S:%p"
) def fun1():
logging.error("error......") fun1()
logging.debug("debug..............")
logging.info("info..............")
logging.warning("warning...........")

结果:


高级用法

 1.生成logger对象
logger = logging.getLogger("web")
logger.setLevel(logging.INFO) #设置日志级别。默认日志级别为 warning
# 2.生成handler对象
console_handler = logging.StreamHandler() # 用于打印的handler
console_handler.setLevel(logging.WARNING) #也可以专门针对 handler设置日志级别
file_handler = logging.FileHandler("web.log") # 用于输出到文件的 handler
file_handler.setLevel(logging.ERROR)
# 2.1 把handler 对象 绑定到 logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 3.生成formatter 对象
console_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s")
# 3.1 把formatter 对象 绑定到 handler
console_handler.setFormatter(console_formatter)
file_handler.setFormatter(file_formatter) logger.info("info----")
logger.warning("warning-------------")
logger.error("error-------")

全局设置的日志级别 和 handler等设置的日志级别,是逐级过滤的。

比如:

  • 全局设置的级别是 info ,handler 设置的级别是 debug , 到最后,debug级别的日志会被过滤掉
  • 全局设置的界别是 info,handler设置的级别是 error ,到最后,error已经高于error 级别的日志会被输出

过滤日志:

# *_*coding:utf-8 *_*
import logging class IngonreBackupLogFilter(logging.Filter):
"""查找带 db backup 的日志"""
def filter(self, record):#固定写法
return "db backup" in record.getMessage()
# 1.生成logger对象
logger = logging.getLogger("web")
logger.setLevel(logging.DEBUG) #设置日志级别。默认日志级别为 warning
# 1.1 把filter对象添加到logger中
logger.addFilter(IngonreBackupLogFilter())
# 2.生成handler对象
console_handler = logging.StreamHandler() # 用于打印的handler
file_handler = logging.FileHandler("web.log") # 用于输出到文件的 handler
# 2.1 把handler 对象 绑定到 logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 3.生成formatter 对象
console_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s")
# 3.1 把formatter 对象 绑定到 handler
console_handler.setFormatter(console_formatter)
file_handler.setFormatter(file_formatter) logger.info("info----")
logger.warning("warning-------------")
logger.error("error-------")
logger.error("error db backup ----") # 打印:
# 2018-07-08 20:10:40,023 - web - ERROR - error db backup ----

文件自动截断:

import logging
from logging import handlers
logger = logging.getLogger(__name__)
log_file = "timelog.log"
# file_handler = handlers.RotatingFileHandler(filename=log_file, maxBytes=10, backupCount=3)
file_handler = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) formatter = logging.Formatter('%(asctime)s - %(module)s - %(lineno)d - %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler) logger.warning("test1")
logger.warning("test2")
logger.warning("test3")
logger.warning("test4")

结果:会按时间生成不同的日志文件:

file_handler = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3)

You can use the when to specify the type of interval. The list of possible values is below. Note that they are not case sensitive.

(你可以使用when来指定interval的类型。可能的值列表如下。注意它们不是区分大小写的。 )

(这个英语还是有很有必要花时间去搞一下的)

Value Type of interval
'S' Seconds
'M' Minutes
'H' Hours
'D' Days
'W' Week day (0=Monday)
'midnight' Roll over at midnight 午夜roll over

python logging—模块的更多相关文章

  1. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  2. python logging模块使用

    近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...

  3. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  4. (转)python logging模块

    python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...

  5. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  6. Python logging模块无法正常输出日志

    废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...

  7. 0x03 Python logging模块之Formatter格式

    目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...

  8. 0x01 Python logging模块

    目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...

  9. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

随机推荐

  1. PHP SECURITY CALENDAR 2017 学习总结-更新中

    这篇文章主要以审计代码为主来分析每道题目中所存在的漏洞点,记录一下自己的学习: 1.Day 1 - Wish List class Challenge { const UPLOAD_DIRECTORY ...

  2. jquery点滴总结

    1.empty().remove().detach() empty():只移除了 指定元素中的所有子节点,而留下 了<p></p>,仍保留其在dom中所占的位置. remove ...

  3. Android界面编程--使用活动条(ActionBar)--添加Action View

    ActionBar除了显示Action Item 外,还能显示普通的ui组件 2种方式添加Action View 1.指定ActionView的实现类 2.指定ActionView对应的视图资源 实现 ...

  4. WPF的依赖项属性

    WPF的依赖项属性 属性与事件是.NET抽象模型的核心部分.WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制,还添加了附加 ...

  5. initBinder转换日期格式

    @Controller public class FirstController { @RequestMapping("/first") //类型转化工作一定是在真正的handle ...

  6. java应用程序已被安全设置阻止的解决办法(总有一个适合你)

    1. 在1月底的一次Java自动更新升级后,我点开已经配置好的Java小程序,赫然看到如下错误: 在网上查找了很多资料,发现就是此次更新的问题,解决方法如下: 控制面板—>Java—>安全 ...

  7. 工作流一期上线原创小故事——【加签】OR【不准】

    亲!您有过选择[加签]还是审核[不准]的烦恼吗? 加签分为:向前加签和向后加签,这个相信大家都很熟悉了吧. 审核分为:准和不准,就是√和×,这个相信大家也很熟悉了. 提示①:相邻的2个人审核时,如果意 ...

  8. 2015年创新工场校园招聘软件研发岗位笔试题目——矩阵旋转

    题目要求:给出一个NxN的矩阵,写出程序将该矩阵进行顺时针旋转90度 // matrixrotation.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h ...

  9. 关于scheduleAtFixedRate方法与scheduleWithFixedDelay的使用

    一.scheduleAtFixedRate方法 该方法是ScheduledExecutorService中的方法,用来实现周期性执行给定的任务,public ScheduledFuture<?& ...

  10. Linux--Smba服务搭建

    Samba文件共享服务 服务功能:跨平台文件共享 1.环境部署 ip=192.168.1.50 [root@localhost Packages]# rpm -ivh samba-3.6.9-164. ...