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'>

[PY3]——logging的更多相关文章

  1. python模块分析之logging日志(四)

    前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...

  2. python 运行日志logging代替方案

    以下是自己写的 记录日志的代码.(和logging不搭嘎,如果如要学loggging模块,本文末尾有他人的链接.) # prtlog.py ############################## ...

  3. 标准库 os、sys、logging、configparser、time、requests

    os : 与操作系统交互的模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于 ...

  4. day17_7.19包与logging模块,深浅拷贝

    一.包 在模块的定义里,模块就是方法的集合,可以将一些常用的方法封装到一个py文件中,通过调用使用,而且,其中的表现形式也有以包的形式导入. 其实,包就是一系列模块的结合体,表示形式就是一个文件夹,在 ...

  5. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...

  6. Oracle补全日志(Supplemental logging)

    Oracle补全日志(Supplemental logging)特性因其作用的不同可分为以下几种:最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键(uni ...

  7. Java程序日志:java.util.logging.Logger类

    一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...

  8. python 学习笔记 -logging模块(日志)

    模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug().logging.info().lo ...

  9. python logging colorlog

    import logging LOG_LEVEL = logging.NOTSET LOGFORMAT = "[%(log_color)s%(levelname)s] [%(log_colo ...

随机推荐

  1. Sublime Text 3 格式化HTML CSS JS 代码

    一,首先通过ctrl+shift+p 要等一会就会出现插件安装界面 二,在插件安装输入框,输入:HTML-CSS-JS Prettify  并安装该插件 三,如果没有装nodejs, 下载nodejs ...

  2. MLLib实践Naive Bayes

    引言 本文基于Spark (1.5.0) ml库提供的pipeline完整地实践一次文本分类.pipeline将串联单词分割(tokenize).单词频数统计(TF),特征向量计算(TF-IDF),朴 ...

  3. ASP.NET关于Session_End触发与否的问题

    项目背景: 要求开发一个篆文识别网站,由于之前做好了WinForm的,把系统直接移植到WebForm上就好.工作比较简单,但确实遇到不少问题. 核心问题是: 篆文识别涉及到用户对原始图片的预处理(例如 ...

  4. .Net应用程序 参照的组合没有安装在您的系统中。 HRESULT: 0x800736B3

    同事打开一个.Net的应用程序链接,一直无法启动.错误信息为: 啓用xx.application 時發生例外狀況. 已偵測到下列失敗訊息:參照的組合沒有安裝在您的系統中. (發生例外狀況於 HRESU ...

  5. js form 表单 重置 清空

    清空 和 重置的差异是 清空是彻底清空input内容即便初始值value有值,重置是将input内容重置为value初始状态 很简单记录下 方便之后使用 //重置 //document.getElem ...

  6. Day 11 函数名,闭包,装饰器. +作业

    '''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...

  7. Delphi - 10.1编译OSX10.12程序遇到错误解决了!

    昨天,尝试Delphi的跨平台开发功能,在windows10下,做了一个控制台程序,发布目标平台是OSX10.12,中间配置过程都非常顺利,没有任何错误,但是当编译运行时候出现下面错误: [dccos ...

  8. django 自定义中间件 middleware

    Django 中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强 ...

  9. JavaScript基础语法及数组相关方法(1)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html <!DOCTYPE html> <html lang=" ...

  10. Codeforces Round #439 (Div. 2) A B C

    强哉qls,这场div2竟是其出的!!! A. The Artful Expedient 暴力 ^ ,判断是否出现,有大佬根据亦或的性质推出 Karen 必赢,太强啦23333333333333. # ...