Python日志记录 - 循环日志(最后n个条目)

时间:2014-12-10 19:51:35

标签: python logging

我知道Python logging库允许您对多个日志文件进行“循环”记录。我要做的只是有一个文件foo.log,它总是< = B 字节大小;如果下一个附加要将其置于 B 之上,则会从顶部删除所有内容。我也很乐意在事件方面指定最大值。

所以,如果这是文件轮换方案,而第4项超过B,你就得到:

foo.log.1    foo.log.2
---------    ---------
African      Swallow 
or
European

我想简单地说:

foo.log
-------
or
European
Swallow

编辑:基于以下评论,人们已经合理地指出这是一种不太理想的格式。动机来自调试。我有使用psycopg2的脚本在2002年陷入困境的远程服务器上执行查询,粗略地说,没有互联网连接。让它记录它发送到数据库的所有内容,然后检查日志是查看出错的最快方法,我必须指出其他人这样做我不想介绍使他们找出哪个的复杂性是当前的日志文件。目前的解决方案就是编写日志,如果日志过大则将其删除。

2 个答案:

答案 0 :(得分:0)

正如Martijn所说,这种类型的日志管理起来会很复杂,而且可能效率低下(尽管这可能与你有关,也可能没有。)

解决部分低效率的简单方法是使用固定记录长度。即使每个日志条目的长度相同(最大)。

另一种方法是使您的日志基于数据库,并为每个日志条目创建一个记录(变量或不变量)。让db管理器处理调整。有简单的(基于RAM的)数据库到真实的,基于磁盘的数据库,所有这些都可以通过Python访问。

另一种解决方案,如果您对基于内存的日志感到满意,请查看FIFO文件。

答案 1 :(得分:0)

您可以登录到文件,每行的开头都带有时间/时间。

到达特定点时,只需从文件顶部再次进行更新。

thefile = open('somebinfile', 'r+b')
thefile.seek(0)

要考虑的事情是,当您查找顶部并写入文件时,您可能只需要覆盖下一行的一半就可以了,因为您将需要以Char / String结尾的唯一行。