python logging—模块
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—模块的更多相关文章
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
- python logging模块使用
近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...
- 读懂掌握 Python logging 模块源码 (附带一些 example)
搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...
- (转)python logging模块
python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...
- Python logging模块无法正常输出日志
废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...
- 0x03 Python logging模块之Formatter格式
目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...
- 0x01 Python logging模块
目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
随机推荐
- 把linux图形启动界面修改成命令行界面
由于图形界面比较耗资源,需要把启动界面修改成命令行界面,怎么修改呢? 1.vim /etc/inittab 2.把id:5:initdefault:改成 id:3:initdefault: 3.重启即 ...
- 理解Windows注册表
理解Windows注册表 注意 完之前先备份reg 前言 在Windows 3.x之前, Windows都是使用.ini文件来保存配置信息的, 但是.ini文件的大小最大只能为64KB, 为了突破这个 ...
- (三)TestNG
1.testNG的部分注解 test测试方法都是执行顺序:并不是从上往下执行的,而是根据方法名ASCII码进行执行的,小的先执行 比如a比b先执行,1比2先执行,不管代码放的顺序是怎么样. impor ...
- node使用https,webSocket开启wss
1. 前言 看WEBRTC教程时使用到WebSocket来传输信令,node端使用了ws库来实现,但在浏览器端http无法获取本地媒体,必须使用https,使用https后webSocket 不能使用 ...
- 跨页面传值2之cookie多值使用
单值cookie结构 CookieKeyName——CookieValue CookieKeyName2——CookieValue2 ............... 通过CookieKeyName进行 ...
- Nginx+PM2+Node.js最简单的配置
一个最简单的反向代理配置方式 server { listen ; server_name www.luckybing.top; location / { proxy_pass http://127.0 ...
- python学习(五)--打印错误信息
from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...
- Linux防火墙命令
linux 查看防火墙状态 1.查看防火墙状态 systemctl status firewalld firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning ...
- Android - Rxjava 使用和原理
用RxJava写的一个Android的小Demo 我所理解的RxJava——上手其实很简单 http://www.jianshu.com/p/5e93c9101dc5
- PAT 1066 Root of AVL Tree
#include <cstdio> #include <cstdlib> class Node { public: Node* L; Node* R; int height; ...