一、logging模块
就是python里面用来操作日志的模块,logging模块中主要有4个类,分别负责不同的工作

1. Logger 记录器,暴露了应用程序代码能直接使用的接口;简单点说就是一个创建一个办公室,让人在里头工作
2. Handler 处理器,将(记录器产生的)日志记录发送至合适的目的地;这个简单点说就是办事的人,你可以指定是让它控制输出日志,或者在文件里面打印日志,
  2.1 常用的有4种:StreamHandler 控制台输出
                               FileHandler 文件输出
             下面两种需要导入
          handlers,通过from logging import handlers导入
            TimedRotatingFileHandler按照时间自动分割日志文件
            RotatingFileHandler 按照大小自动分割日志文件,一旦达到指定的大小重新生成文件 
3. Filter过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。(不常用)
4. Formatter格式化器,指明了最终输出中日志记录的布局。指定输出日志的格式

二、日志级别
  debug < info < warning < error < critical
  设置了日志级别之后,会打印该级别以及比该级别高的所有日志,举个例子,如果日志级别是warning,那么就会打印warning、error、critical,这三个级别的日志,
  不会打印debug和info级别的,如果是debug,最低级别的日志,那么所有的日志都会打印。
下面通过一个实例来实现既产生日志文件,也在控制台输出日志:

 import logging
from logging import handlers
logger = logging.getLogger()#先实例化一个logger对象,先创建一个办公室
logger.setLevel(logging.DEBUG)#设置日志的总级别
cl = logging.StreamHandler()#创建一个控制台输出的处理器,负责往控制台输出的,这两个就是上面说的Handler
bl = handlers.TimedRotatingFileHandler(filename='a.log',when='S',interval=1,backupCount=3,encoding='utf-8')
#指定间隔时间自动生成文件的处理器
#interval是时间间隔,backupCount是备份文件的个数,如果超过这个超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
# S 秒
# M 分
# H 小时、
# D 天、
# W 每星期(interval==0时代表星期一)
# midnight 每天凌晨
fmt = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')#指定日志的格式
cl.setFormatter(fmt)#设置控制台输出的日志格式
bl.setFormatter(fmt)#设置文件里面写入日志格式 logger.addHandler(cl)#将已经设置好的人,添加到办公室
logger.addHandler(bl)#将已经设置好的人,添加到办公室 logger.debug('我是debug...')
logger.warning('我是warning...')

也可以封装一个写日志的类

 import logging
from logging import handlers
class MyLogger():
def __init__(self,file_name,level=logging.INFO,backCount=5,when='D'):
logger = logging.getLogger()#先实例化一个logger对象,先创建一个办公室
logger.setLevel(self.get_level(level))#设置日志的级别
cl = logging.StreamHandler()#负责往控制台输出的
bl = handlers.TimedRotatingFileHandler(filename=file_name,when=when,interval=1,backupCount=backCount,encoding='utf-8')
#when='S'按什么单位,S秒,M分,H小时,D天,W每星期,隔多久生成一个
fmt = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')#指定日志的格式
cl.setFormatter(fmt)#设置控制台输出的日志格式
bl.setFormatter(fmt)#设置文件里面写入日志格式
logger.addHandler(cl)#将已经设置好的人,添加到办公室
logger.addHandler(bl)#将已经设置好的人,添加到办公室
self.logger=logger def get_level(self,str):
level = {
'debug':logging.DEBUG,
'info':logging.INFO,
'warn':logging.WARNING,
'error':logging.ERROR
}
str=str.lower()
return level.get(str) lw_log = MyLogger('lw.log')
lw_log.logger.warning('哈哈哈')

最新文章

  1. Oracle:ODP.NET Managed 小试牛刀
  2. Prim算法和Kruskal算法(图论中的最小生成树算法)
  3. editplus的配置文件来支持sql语法高亮【转】
  4. 论游戏中Buff的实现 [转]
  5. 为什么国外程序员爱用苹果 Mac 电脑?
  6. PRJ: Split a nodes-map into some triangles
  7. 一个简单的Servlet工具
  8. Scala入门 【1】
  9. docker容器安装及使用技巧
  10. 【转】Chrome 控制台新玩法-console显示图片以及为文字加样式
  11. ubuntu 在 Windows 下的安装
  12. [数据库]Sqlite使用入门
  13. Kafka的通讯协议
  14. GDI+绘制五星红旗
  15. python day17面向对象-组合
  16. 尚硅谷springboot学习7-yaml配置文件
  17. Android 一个相对完整的自动升级功能实现代码
  18. 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
  19. C# 在EF中直接运行SQL命令
  20. Java中的容器和注入分析

热门文章

  1. class类 __repr__ 与__str__
  2. Jenkins安装及基本配置(Linux版,使用web容器 tomcat 搭建)
  3. php中time()与$_SERVER[REQUEST_TIME]用法区别
  4. LOJ #10070 最小生成树计数
  5. context使用
  6. spring boot使用mongodb时,xxxRepository不能Autowired的问题
  7. 自定义控件之SegmentControlView
  8. Python-王者荣耀自动刷金币+爬取英雄信息+图片
  9. CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频
  10. 关于截取URL地址参数的方法