import logging
 
1、自定义日志级别,日志格式,输出位置
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s | %(levelname)s| %(message)s‘,%(name)s root log是?
filename='filepath'
filemode='w'
)
level :指定root logger的日志级别(DEBUG)
format:日志格式
filename:文件写入的路径
filemode:末填写,默认是追加方式’a‘
日志级别排序:CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTEST
logging.debug('debug info')
logging.info('info log')
logging.warning('warning log')
logging.error('error log')
级别从低到高
结果:
2017-06-25 09:12:00,025 | DEBUG| debug info
2017-06-25 09:12:00,025 | INFO| info log
2017-06-25 09:12:00,025 | WARNING| warning log
2017-06-25 09:12:00,025 | ERROR| error log
 
(1)format:指定handler使用的日志显示格式,即日志打印的格式字符串。可
用到的格式化串:
%(name)s:Logger的名字;
%(levelno)s:日志级别的数值;
%(levelname)s:日志级别名称;
%(pathname)s:当前执行程序的路径,其实就是sys.argv[0],可能没有;
%(filename)s:调用日志输出函数的模块的文件名;
%(module)s:当前执行程序的程序名;
%(funcName)s:日志输出函数的函数名;
%(lineno)d:日志输出函数的语句所在的代码行;
%(created)f:当前时间,用UNIX标准的表示时间的浮点数表示;
%(relativeCreated)d:输出日志信息时的,自Logger创建以来的毫秒数;
%(asctime)s:字符串形式的当前时间。默认格式是 “2016-06-06
16:49:45,896”。逗号后面的是毫秒;
%(thread)d:线程ID。可能没有;
%(threadName)s:线程名。可能没有;
%(process)d:进程ID。可能没有;
%(message)s:用户输出的消息;
 
2、基础知识
(1)root log是所有日志实例的祖先
(2)其他的日志实例通过logging.getLogger('logname')来获取实例
(3)子节点会继承root log 的所有属性
(4)日志具有传递性,在子节点上写的日志,会继承父节点的日志handler,并处理。
(5)对于一个logger,可以设置fileHandler和streamhandler
FileHandler:用于写入日志文件
StreamHander:用于输出到控制台
(6)对于一个logger,可以设置Formatter(输出的格式)
logging.Filter(name) 过滤出需要的日志,使用率比较低
 
root Logger的子孙logger的消息不仅会发送给他们自己的handler处理,还会发送给其所有的祖
先处理。
 
log1=logging.getLogger('log1') 如果没有名字,默认为root
log1.setLevel(logging.INFO)
 
fh=logging.FileHandler('path')
sh=logging.StreamHandler()
fmt=logging.Formatter('%(asctime)s|%(name)s|%(filename)s|%(levelname)s|%(message)s')
fh.setFormatter(fmt)
sh.setFormatter(fmt)
log1.addHandler(fh)
log1.addHandler(sh)
 
log2=logging.getLogger('log1.log2') log1是log2的父节点
log2.info('log2 info msg')
log1.info('handler log test')
root默认有streamhandler,
 
3、root log 是全局唯一的
对root log进行配置的时候(使用logging.basicConfig来配置),后面的配置会覆盖前面的
只用root log的弊端
(1)FileHandle 和 StreamHandle不能并存,使用不方便
filename='path' #FileHandle
stream=sys.stdout #StreamHandle 输入到控制台
(2)不能配置多个FileHandle
 
4、日志自动分文档存储
import logging
import logging.handlers
 
rootLog=logging.getLogger()
rootLog.setLevel(logging.DEBUG)
fh=logging.handlers.RotatingFileHandler('path',maxBytes=512,backupCount=3)
maxBytes:每个日志最大的存储空间
backupCount:可以备份三个日志
fmt=fh.setFormatter(fmt)
rootLog.addHandler(fh)
for i in xrange(10000):
rootLog.info('info log')
 
5、日志操作:logging模块提供的日志处理组件
(1)Logger :提供应用程序可直接使用的接口
(2)Handler :发送日志到适当的目的地
(3)Filter :提供了过滤日志信息的方法
logging.Filter('name')
把log为name的实例和该实例下的所有子实例的log显示出来
(4)Formatter :指定日志显示格式

Python之日志操作(logging)的更多相关文章

  1. Python之日志处理 logging模块

    Python之日志处理(logging模块)   本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四 ...

  2. python标准日志模块logging及日志系统设计

    最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下. python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发 ...

  3. python标准日志模块logging的使用方法

    参考地址 最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下.python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果 ...

  4. python日志操作logging

    步骤: 1.定义一个日志收集器 my_logger = logging.getLogger("kitty") 2.设定级别.默认为warning:debug,,info,error ...

  5. Python模块:日志输出—logging模块

    1. logging介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/ ...

  6. 【Python】 日志管理logging

    logging *****本文参考了http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html ■ 最最基本的用法 logging模块用 ...

  7. python的日志模块logging和syslog

    syslog模块是在unix环境下工作的模块,不能用于windows,在windows环境下可以使用logging模块. 一.syslog syslog模块可以用于记录系统运行的信息,这个模块提供的方 ...

  8. Python的日志记录-logging模块的使用

    一.日志 1.1什么是日志 日志是跟踪软件运行时所发生的事件的一种方法,软件开发者在代码中调用日志函数,表明发生了特定的事件,事件由描述性消息描述,同时还包含事件的重要性,重要性也称为级别或严重性. ...

  9. python标准日志模块logging使用

    python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: ...

随机推荐

  1. java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符

    通配符?,?表示占位,表明将来使用的时候在指明类型 <?>无限定的通配符, 是让泛型能够接受未知类型的数据 <? extends E> 有上限通配符,能够接受指定类及其子类类型 ...

  2. [BZOJ1040][ZJOI2008]骑士(树形DP)

    对于一个联通块内,有且只有一个环,即n个点n条边 那么找到那个环,然后任意断一条边,这个联通块就变成一棵树了,然后做树形DP就行了 对于断的边要记录下来DP时特判 Code #include < ...

  3. 从一个线上服务器警告谈谈backlog

    缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的反馈,都是相同的反馈--"客户端操作缓慢". 我现在负责的服务器是一台接口服务器, ...

  4. Qt Qwdget 汽车仪表知识点拆解2 图像放大

    先贴上效果图,注意,没有写逻辑,都是乱动的 这里讲下 这个小汽车的进入过程,其实这个说白了就没有技术含量了,本来应该趁着这个机会学习一下Qt的动画机制,不过随机一想,这个自己写也累不到那里去 下面说下 ...

  5. C++学习005-循环

    C++在循环方面,感觉个C没有身边么区别 while循环 for循环 do while循环 其实 使用Goto也可以写个循环 编写环境vs2015 1. while循环 int main() { in ...

  6. spring-boot分页插件

    1.分页插件,spring-boot.,第一次调用时,存值到 model.addAttribute("status", id);页面获取2.页面获取 后台存入的值,放在input ...

  7. 51单片机实现外部中断0-F

    #include< reg51.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 = 0x94; sfr ...

  8. SetWindowPos,RegisterHotKey,GlobalAddAtom的用法

    还以为SetWindowPos是给Frm的子框架间编写的,原来是给mainfrm写的,可以把你写的主窗口置顶,置底(看样子应该可以变成桌面了,还没试呢,才忙到现在...) 子窗口的遮挡可以使用窗口的样 ...

  9. 对SE的认识

    对SE的认识 简述 “架构师”,也就是SE,总是给外人一种比较牛逼的感觉,其实踏实做开发的真的很少关注这个title. 抛开这个名词,这个角色的存在的确有一定的意义,因为项目中需要一个能“带领大家前进 ...

  10. 对 vscode 自动格式化的结果不太满意,我们该如何自己调整直至自己满意为止

    前提概述 采用vue-cli 3.0自动生成vue项目,选了ESlint+Prettier,在写request.js的时候,顺手用vscode右击格式化文件(Alt+Shift+F),一下子报了8个问 ...