[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'>
[PY3]——logging的更多相关文章
- python模块分析之logging日志(四)
前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...
- python 运行日志logging代替方案
以下是自己写的 记录日志的代码.(和logging不搭嘎,如果如要学loggging模块,本文末尾有他人的链接.) # prtlog.py ############################## ...
- 标准库 os、sys、logging、configparser、time、requests
os : 与操作系统交互的模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于 ...
- day17_7.19包与logging模块,深浅拷贝
一.包 在模块的定义里,模块就是方法的集合,可以将一些常用的方法封装到一个py文件中,通过调用使用,而且,其中的表现形式也有以包的形式导入. 其实,包就是一系列模块的结合体,表示形式就是一个文件夹,在 ...
- 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" ...
- Oracle补全日志(Supplemental logging)
Oracle补全日志(Supplemental logging)特性因其作用的不同可分为以下几种:最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键(uni ...
- Java程序日志:java.util.logging.Logger类
一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...
- python 学习笔记 -logging模块(日志)
模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug().logging.info().lo ...
- python logging colorlog
import logging LOG_LEVEL = logging.NOTSET LOGFORMAT = "[%(log_color)s%(levelname)s] [%(log_colo ...
随机推荐
- [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
Unique Paths https://oj.leetcode.com/problems/unique-paths/ A robot is located at the top-left corne ...
- linux系统编程之文件与IO(四):目录访问相关系统调用
1. 目录操作相关的系统调用 1.1 mkdir和rmdir系统调用 1.1.1 实例 1.2 chdir, getcwd系统调用 1.2.1 实例 1.3 o ...
- TSQL--按某字段列分组,在将各组中某列合并成一行
鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...
- DBCC--LOG
DBCC LOGTo retrieve the transaction log for a given database.对应日志文件较大的数据库,慎用该命令Uasge:DBCC LOG(<db ...
- NLayerAppV3-Distributed Service Layer(分布式服务层)
回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...
- C#调用C++库知识点
DllImport方式: CharSet属性:Ansi短字节和Unicode长字节 CallingConvention属性:Cdecl清理和被调用方清理堆栈 EntryPoint属性:定位函数入口.如 ...
- MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用
今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华的利刃 MVVMLight系列. 一个窗口的基本模型如下: View(视图) -> ViewModel ...
- Docker容器的原理与实践(上)
本文来自网易云社区. 虚拟化 是一种资源管理技术,将计算机的各种资源予以抽象.转换后呈现出来, 打破实体结构间的不可切割的障碍,使用户可以比原本更好的方式来应用这些资源. Hypervisor 一种运 ...
- 配置阿里yum源,设置命令
配置阿里yum源 #linux的软件包管理 安装 软件的方式有三种 .源代码编译安装() .下载python3的源代码 .解压缩源代码 .进入源代码目录,开始编译安装 .配置环境变量 .yum方式安装 ...
- 通过修改EIP寄存器实现32位程序的DLL注入
功能:通过修改EIP寄存器实现32位程序的DLL注入 <如果是64位 记得自己对应修改汇编代码部分> 原理:挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...