支持并发、gzip和windows的rotatingfilehandler替换

concurrent-log-handler的Python项目详细描述


概述
==
此包为python的标准日志
包(pep 282)提供了额外的日志处理程序。此处理程序将日志事件写入一个日志文件,当日志文件达到一定大小时,该日志文件将被
旋转。多个进程可以同时安全地写入同一个日志文件。如果启用,则可以对旋转日志进行gzip
。windows和posix系统都受支持。提供了一个可选的线程化队列日志记录处理程序,用于在后台执行日志记录。

除了将包名从
`cloghandler`更改为'concurrent戋log戋handler`.


详细信息
===
,它应该是旧版本的用户
的替代品。_ portalocker:http://code.activestate.com/recipes/65203/


concurrentrotatingfilehandler类是python标准日志处理程序rotatingfilehandler的替换项。此模块使用文件
锁定,以便多个进程可以同时记录到单个文件,而不会
删除或删除日志事件。该模块提供一个文件旋转方案
,类似于"rotatingfilehanler"。在开始旋转过程之前,应特别注意确保
日志可以安全地旋转。(此模块在Windows上使用"rotatingfilehandler"解决文件重命名问题,其中
旋转失败意味着删除所有后续日志事件)。

这意味着日志
文件将增长到大于指定的最大(旋转)大小。因此,如果磁盘空间不足,您可能需要使用"rotatingfilehandler",它将严格遵循最大文件大小。


脚本应该使用"concurrentrotatingfilehandler"。您不应尝试混合使用
并匹配"rotatingfilehandler"和"concurrentrotatingfilehandler"。


此软件包捆绑"portallocker"来处理文件锁定。


安装pip install concurrent log handler

如果从源安装,您可以使用::





示例
=


简单示例
----
这里有一个示例演示如何直接使用此模块(从
python代码中)::

从并发日志处理程序导入concurrentrotatingfilehandler
import os

log=getlogger()
保留5个旧副本。
rotatehandler=concurrentrotatingfilehandler(日志文件,"A",512*1024,5)
log.addhandler(rotatehandler)
log.setlevel(info)

log.info("这里有一条非常令人兴奋的日志消息,仅为您")



自动回退示例

"rotatingfilehandler"中,有一个示例:

尝试:
从并发日志处理程序导入concurrentrotatingfilehandler作为rfhandlerwarn("未安装并发日志处理程序包。使用内置日志处理程序")
从日志中。处理程序将rotatingfilehandler导入为rfhandler

log=getlogger()
rotatehandler=rfhandler("/path/to/mylogfile.log","a",1048576,15)
log.addhandler(rotatehandler)




config file example
----
此示例演示如何将此日志处理程序与日志配置文件
解析器一起使用。这允许您将日志配置代码与应用程序代码分开。

[日志根]
level=notset
handlers=hand01

[handler=hand01]
class=handlers.concurrentRotatingFilehandler
level=notset
formatter=form01
args=("rotating.log","a",512*1024,5)

[格式化程序格式01]
格式=%(asctime)s%(levelname)s%(消息)s

logging.config
导入并发日志处理程序

logging.config.fileconfig("logging.ini")
log=logging.getlogger()
log.info("这里有一条非常令人兴奋的日志消息,仅为您")



更改日志
==
-0.9.16:使用包含在控制盘中的错误代码修复发布问题
主要影响python 2-请参阅问题21

-0.9.15:修复python 2上最新版本的错误。(问题21)感谢@condontrevor
另外,在python 2和3上,应用unicode错误策略(默认值:忽略)将
日志消息转换为输出流的编码。即。,默认情况下,它将筛选(删除)日志消息中无法转换为输出日志文件编码的任何字符。


-0.9.14:修复在指定编码时在Windows上写入lf行结尾。
添加了换行符和终止符kwargs以允许自定义行结束行为。
感谢@vashek

-0.9.13:修复具有值的崩溃错误:关闭文件上的I/O操作(问题16)
还应修复与Windows文件锁定相关的崩溃问题13。
感谢@terencehonles,@nsmcan,@wkoot,@不需要执行硬部分

-0.9.12:添加umask选项(感谢@blakehilliard)
这增加了在创建日志文件时控制权限标志的能力。

-0.9.11:修复gzip压缩选项的问题(使用缓冲)

-0.9.10:修复意外锁定分叉时共享
感谢@eriktews提供此修复

-0.9.9:fix python 2在上一版本中中断的兼容性

-0.9.8:bug修复和权限功能
*fix for issue 4-attribute error:"nonetype"对象没有属性"write"
此错误可能是如果在另一个日志语句的format()调用中生成的日志语句中发生翻转,则会导致此问题。
*Pywin32依赖关系规范的修复(显式要求Pywin32)
*指定翻转文件的所有者和权限(模式)的能力[仅限Unix]

-0.9.7/0.9.6:pypi的fix platform说明符

-0.9.5:添加"使用gzip"选项来压缩旋转的日志。根据标准库的"logging.queue handler"添加一个可选的线程化日志队列处理程序。

-0.9.4:fix setup.py以不在分发中包含测试。

-0.9.3:refactoring release
*用于将pypi上的fork发布为新包下的"并发日志处理程序"名称。
*注意:Pywin32在Windows上是必需的,但不是显式依赖项,因为
Pywin32包当前无法通过PIP安装。
*修复锁定行为/竞争条件

-0.9.2:普雷斯顿登陆器初始释放fork。
*修复最新版本的python存在死锁问题
*在锁文件名前面加上前缀
*如果可用,请使用"secrets"或"systemrandom"。
*添加/修复windows支持

_红帽bug 858912:https://bugzilla.red hat.com/显示bug.cgi?ID=858912
…_ python错误15960:http://bugs.python.org/issue15960
…_ lp错误1199332:https://bugs.launchpad.net/python并发日志处理程序/+bug/1199332
。_ lp bug 1199333:https://bugs.launchpad.net/python concurrent log handler/+bug/1199333


-0.9.1:错误修复-`lp bug 1199332``和`lp bug 1199333`.
*更优雅地处理磁盘空间不足的情况。防止release()引发异常。
*在Python2.7+中处理logging.shutdown()。通过
close()关闭锁定文件流。
*非常感谢dan callaghan转发这些问题和修补程序。

-0.9.0:现在需要python 2.6+
*修改文件打开/关闭和文件锁定内件(灵感来自vinay sajip的
反馈。)
*添加"delay"参数(延迟日志文件打开)可以更好地匹配最新版本的python中的核心日志功能。
*对于仍在使用python 2.3-2.5的任何人,请使用最新的0.8.x版本

-0.8.6:使用测试脚本修复打包错误0.8.5版本中的打包错误。(感谢bjórn h_user
引起我的注意。)
*更新了stresstest.py,以便在启动子进程而不是系统默认的"python"时始终使用正确的python版本。

-0.8.5:固定值错误:对关闭文件的I/O操作
*感谢Vince Carney、Arif Kasim、Matt Drew、Nick Coghlan和Dan Callaghan的错误报告。现在可以在这里填写错误:
https://bugs.launchpad.net/python-concurrent-log-handler。Bugs Resolved
"Red Hat Bug"858912"和"Python Bug"15960"更新了ez廑u setup.py到0.7.7
*Portalocker更新到0.3(现在由Rick van Hattem维护)
*初始Python 3支持(需要更多测试)
*修复了小的拼写错误

-0.8.4:修复了锁定文件命名问题
*解决了一个小问题,即如果
日志文件在日志名称中间包含".log",则将不正确地命名锁定文件。例如,如果
日志文件是"/var/log/mycompany.log ging.mysource.log",则锁文件
将命名为"/var/log/mycompany.ging.mysource.lock",这是不正确的。
感谢dirk rothe指出了这一点。由于这会带来轻微的
锁定文件行为差异,因此如果此问题影响到您,请确保所有并发写入程序都同时更新
到0.8.4。
*将ez_setup.py更新到0.6c11

-0.8.3:修复了日志文件旋转错误并更新了文档
*修复了当多个进程响应同一个日志文件时,在日志旋转之后发生的错误。每个进程最后都会写入自己的
日志文件("log.1"或"log.2"而不是"log")。修复方法只是重新打开
日志文件并再次检查大小。我不认为这个bug会导致
数据丢失;但是,这肯定不是期望的行为。(非常感谢Oliver Tonnhofer发现、记录并为这个bug提供
补丁。)
*清理文档。(又名"你现在正在阅读的页面")我修正了一些愚蠢的错误和打字错误…这东西是谁写的?

-0.8.2:小错误修复版本(再次发布)
*发现并解决了不支持编码的旧日志包的另一个问题。

-0.8.1:小错误修复版本
*现在直接导入"编解码器";我发现在不同的python 2.4.x版本中,
日志模块有一些细微的差异,导致该模块无法加载。

-0.8.0:minor feature release
*添加了对使用"logging.config.fileconfig()"的更好支持。此类
现在可以使用``class=handlers.concurrentrotatingfilehandler``.
*在给定
相对路径。

-0.7.4:小错误修复
*修复了包描述中的错误(类名不正确)
*添加了更改日志;您现在正在阅读的内容。
*修复了``close()``方法,使其不再假设流仍处于打开状态。

我看不出这应该是个问题的原因,但是在线程环境中没有进行压力测试。如果这对您很重要,您可以始终在"stresstest.py"脚本中添加
线程支持,并向我发送修补程序。

*更新:这在多进程并发环境中工作,但我没有用线程或异步对其进行广泛的测试,但应该处理
通过父日志类。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用setter将对象转换为java中的映射   java如何通过JQL直接找到多对多实体的交集?   java Android文本检查帮助   纸牌游戏中的java玩家顺序   java从活动A移动到活动B,再从活动B返回到活动A   java如何在GAE servlet中保存JSON文件以满足Android客户端的请求?   连接到本地主机上的SLiM服务器时发生java错误:8080   java是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?   检查数字是否为回文的java逻辑   java在两个独立的服务中是否存在数据同步模式?   java在组合框中选择ascendingorder时如何对元素列表进行排序   java如何在不更新旧表的情况下更新表中的字段并将其插入新表   javasos和return语句   java与示例安卓活动建立解析连接。错误:任务“:app:dexDebug”的执行失败   java Maven发布问题,带有代理授权的分叉部署过程,因为参数失败,需要407代理授权