资讯专栏INFORMATION COLUMN

python(logging )日志模块学习

stonezhu / 477人阅读

摘要:它的构造函数是其中参数是一个文件对象。它的构造函数是是文件名,必须指定一个文件名。用于指定日志文件的最大文件大小。它的构造函数是其中参数和参数和具有相同的意义。表示时间间隔的单位,不区分大小写。可能没有线程名。

0.前置说明

1.运行环境:Win7虚拟机、python2.7(anacoda版)

2.本文大部分内容引用此参考文献:http://my.oschina.net/leejun2005/blog/126713

1.基本元素说明:

Logger:用于输出的日志的总对象

Handlers:用来指定log的输出方式

Formatters:设置日志信息的结构和内容格式,默认的时间格式为%Y-%m-%d %H:%M:%S

Filter:过滤器,用来过滤的输出内容(如:只输出debug以上的内容)

Logger 常用函数

LOG=logging.getLogger(”chat.gui”)

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高

Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter

Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler

Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

Logger.log("debug","This is a bug"):可以通过这个函数直接输出内容并选择对应的告警级别

内置级别
名称 对应数字级别
NOTSET 0
DEBUG 10
INFO 20
WARNING 30
ERROR 40
CRITICAL 50
Handlers 1.常用函数

Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略

Handler.setFormatter():给这个handler选择一个格式

Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

2.Handler种类

logging.StreamHandler
使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。
它的构造函数是:StreamHandler([strm])
其中strm参数是一个文件对象。
默认是sys.stderr

logging.FileHandler
和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。
它的构造函数是:FileHandler(filename[,mode])
filename是文件名,必须指定一个文件名。
mode是文件的打开方式。
默认是’a",即添加到文件末尾。

logging.handlers.RotatingFileHandler
这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把 文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建 chat.log,继续输出日志信息。
它的构造函数是:RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
其中filename和mode两个参数和FileHandler一样。
maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

logging.handlers.TimedRotatingFileHandler
这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。
interval是时间间隔。
when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
S 秒
M 分
H 小时
D 天
W 每星期(interval==0时代表星期一)
midnight 每天凌晨

logging.handlers.SocketHandler

logging.handlers.DatagramHandler
以上两个Handler类似,都是将日志信息发送到网络。不同的是前者使用TCP协议,后者使用UDP协议。它们的构造函数是:
Handler(host, port)
其中host是主机名,port是端口名

logging.handlers.SysLogHandler

logging.handlers.NTEventLogHandler

logging.handlers.SMTPHandler

logging.handlers.MemoryHandler

logging.handlers.HTTPHandler

Formatters
参数 含义
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37565.html

相关文章

  • Python Logging 日志记录入门

    Python Logging原来真的远比我想象的要复杂很多很多,学习路线堪比git。但是又绕不过去,alternatives又少,所以必须要予以重视,踏踏实实认认真真的来好好学学才行。 学习Logging的目的:简单脚本还好,print足够。但是稍微复杂点,哪怕是三四个文件加起来两三百行代码,调试也开始变复杂起来了。再加上如果是后台长期运行的那种脚本,运行信息的调查更是复杂起来。一开始我还在各种查...

    fnngj 评论0 收藏0
  • 学习 python logging(1): 基本用法

    摘要:简介日志在编程中是十分重要,可以帮助我们跟踪事件应用的运行情况查问题统计数据等。在记录日志时,通常表示某件事情的发生。基本使用直接打印运行之后看到的是因为默认等级是所以是不会显示的。 简介 日志在编程中是十分重要,可以帮助我们跟踪事件、应用的运行情况、查问题、统计数据等。在记录日志时,通常表示某件事情的发生。 python 中 logging 模块提供记录的基础方法: debug, i...

    Donne 评论0 收藏0
  • 5分钟教你学会Django系统错误监控

    摘要:一监控所有的请求如何实现系统监控,自动发送错误日志的邮件呢只需配置配置文件即可。设置发送邮件配置信息邮件会发送到设定的邮件列表中。 showImg(https://segmentfault.com/img/remote/1460000015327475); 一、监控所有的request请求 如何实现系统监控,自动发送错误日志的邮件呢? 只需配置配置settings文件即可。 1.设置发...

    Aldous 评论0 收藏0
  • Django搭建个人博客:日志记录

    摘要:每一条日志记录也包含级别,代表对应消息的严重程度。即格式化器,主要功能是确定最终输出的形式和内容。最好是日志能够按自然天进行记录和分割。 上一章学习了自动化测试,很好,现在我们可以绞尽脑汁写出一份全面的测试,来保证代码永远健康了。 话虽如此,但是作为一个独立开发者很难写出真正全面的测试代码。这是因为用户在使用你的网站时可不会循规蹈矩,而是会以各种怪异的姿势浏览网页、上传数据。但这也不是...

    Lowky 评论0 收藏0
  • Unity命令行模式,也能「日志实时输出」

    摘要:类似这样执行打印最终输出的日志要想在命令行模式工作的时候,查看它的编译进度,霖哥一般会远程跑进执行编译工作的机器,然后用命令,把它的日志实时输出来嗯,这相当的不科学啊。我是霖哥,一个商学院毕业的程序员,一个游戏开发工程师。 showImg(https://segmentfault.com/img/remote/1460000008856262); 如果你使用过Unity命令行模式(ba...

    whjin 评论0 收藏0

发表评论

0条评论

stonezhu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<