当前位置: 首页 > news >正文

[PY3]——logging

logging模块的logger、handler、filter、formatter

Logger记录器

提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

Handler处理器

将日志记录(log record)发送到合适的目的地(destination),比如文件、socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。下面是几种常见的Handler:

what handler

描述

StreamHandler

发送log到streams(可以理解为标准输出吧)

FileHandler

发送log到文件

SoketHandler

send to TCP/IP Sockets

DatagramHandler

send to UDP Sockets

SMTPHandler

send to 指定的email地址

RotatingFileHandler

send to文件,支持最大日志文件大小和日志文件轮转

TimedRotatingFileHandler

send to 文件,支持在特定时间内日志文件轮转  

Formatter格式化器

指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

Filter过滤器

提供一种优雅的方式决定一个日志记录是否发送到handler。

应用实例

# 创建logger对象
logger=logging.getLogger('AppName')

# 指定日志输出格式
formatter=logging.Formatter('%(asctime)s  %(name)s  %(levelname)s : %(message)s')

# 创建FileHandler,并指定其输出格式为formatter
file_handler=logging.FileHandler("/tmp/test.log")
file_handler.setFormatter(formatter)

# 创建StreamHandler,并指定其输出格式为formatter
console_handler=logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)

# 为logger添加日志处理器(Handler),1个logger可以有N个Handler
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 设置logger的最低输出级别
logger.setLevel(logging.INFO)

logger.debug('debug message')
logger.info('info message')
logger.warning('warring message')
logger.error('error message')
logger.fatal('fatal message=critical message')
logger.critical('critical message')

# 移除日志处理器
logger.removeHandler(file_handler)

 

logging配置的几种方法

logging.GetLogger( )

其使用方法参考上面的实例。

默认的logger名称是“root”。如果在同一个程序中都使用同名的logger,其实会拿到同一个实例。这个技巧可以实现跨模块调用同样的logger记录日志。

也可以通过日志名称来区分同一程序的不同模块。

 

logging.basicConfig( )

1. basicConfig中常用的参数如下:

Format

描述

filename

将log信息输出到文件,filename指定文件位置

filemode

打开日志文件的mode,默认是“a”

format 

指定日志输出的格式

datefmt 

指定日期/时间格式(即类似time模块的格式化格式)

level

设置日志最低输出级别

style

 

stream

 

handlers

 

2. format常用的输出如下:

format

描述

%(levelno)s

打印日志级别的数值

%(levelname)s

打印日志级别名称

%(pathname)s

打印当前执行程序的路径

%(name)s

打印日志名

%(filename)s

打印当前日志输出函数的模块的文件名

%(funcName)s

打印日志的当前函数

%(asctime)s

打印日志的时间

%(thread)d

打印线程id

%(threadName)s

打印线程名称

%(process)d

打印进程ID

%(message)s

打印日志信息

%(lineno)d

打印日志的当前行号

3. 实例

logging.basicConfig(filename='/tmp/log.txt',level=logging.INFO,format='%(asctime)s %(levelname)s  [%(threadName)s] %(message)s')

logging.debug('debug message')
logging.info('info message')
logging.warning('warring message')
logging.error('error message')
logging.critical('critical message')

# cat /tmp/log.txt
  2017-09-01 11:24:43,056 INFO  [MainThread] info message
  2017-09-01 11:24:43,056 WARNING  [MainThread] warring message
  2017-09-01 11:24:43,056 ERROR  [MainThread] error message
  2017-09-01 11:24:43,056 CRITICAL  [MainThread] critical message

 

通过配置文件进行配置,使用fileConfig()函数读取配置文件

通过配置字典进行配置,使用dictConfig()函数读取配置信息

通过网络进行配置,使用listen()函数进行网络配置

 

 

 

In [1]: import logging

In [2]: import importlib

In [3]: importlib.reload(logging)
Out[3]: <module 'logging' from '/root/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py'>

 

转载于:https://www.cnblogs.com/snsdzjlz320/p/7495922.html

相关文章:

  • python笔记视频_python视频笔记之三(循环和函数)
  • 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
  • linux添加ip白名单_为什么IP代理需要授权?
  • 事件对象练习
  • yii beforeaction 如何赋值全局变量_讲讲 js 的内存泄漏、如何监控和分析
  • Java基础总结--变量、运算符总结
  • boolean mybatis_mybatis的环境搭建以及问题
  • 软件工程实践2017第二次作业
  • python django步骤_python - django (创建到运行流程)
  • CODEVS——T 1004 四子连棋
  • linux查看显卡信息_如何查看linux系统的相关信息
  • 华宇笔试题总结
  • system.objectdisposedexception: 已释放该集合_集合啦!动物森友会夏季更新第 2 弹!烟火大会、梦境参观、复原储存资料即将来袭...
  • JS中innerHTML、outerHTML、innerText 、outerText、value的区别与联系?jQuery中的text()、html()和val() ?...
  • python 逗号作用 语句间_python逗号作用
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • css布局,左右固定中间自适应实现
  • django开发-定时任务的使用
  • ES6简单总结(搭配简单的讲解和小案例)
  • IDEA常用插件整理
  • js继承的实现方法
  • MySQL QA
  • overflow: hidden IE7无效
  • Python连接Oracle
  • React16时代,该用什么姿势写 React ?
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringBoot几种定时任务的实现方式
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Vultr 教程目录
  • windows-nginx-https-本地配置
  • 经典排序算法及其 Java 实现
  • 实现简单的正则表达式引擎
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 探索 JS 中的模块化
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 新手搭建网站的主要流程
  • 新书推荐|Windows黑客编程技术详解
  • 学习HTTP相关知识笔记
  • 原生Ajax
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​520就是要宠粉,你的心头书我买单
  • #includecmath
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #pragma 指令
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (2)STL算法之元素计数
  • (Java)【深基9.例1】选举学生会
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (pytorch进阶之路)扩散概率模型
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...