0

我的程序当前将日志写入磁盘。日志文件是具有两个字段的序列化对象:时间和日志消息。文件名是随机的 32 字符字符串。

我在 Django 中还有一个 Web UI,可以让用户查看日志,用户可以在其中输入持续时间(以秒为单位)和结束时间(任何纪元时间戳),因此会显示从 endtime-duration 到 endtime 的所有日志。

我目前在做什么:

  1. 每次用户加载/刷新 UI 时从磁盘读取所有日志
  2. 按时间向后排序日志
  3. 有一个吐出日志的 for 循环,当日志比 endtime 新时它会继续,并在第一次遇到比 endtime-duration 旧的日志时中断

我想做的事:

  1. 只读取用户请求的日志,或者至少比每次都读取更好。

约束:

  1. 我无法更改日志文件名,但我可以将日志文件存储在不同的(子)文件夹中
  2. 没有缓存
  3. 单线程(每条需要的日志都读完后才能显示日志,不能部分显示)

谢谢!

4

2 回答 2

0

您可以使用修改日期过滤您阅读的文件os.path.getmtime;阅读文件的第一行将有助于确定它是否在请求的时间范围内并值得阅读。此外,您可以通过反映创建时间的文件夹对日志文件进行分区,这将减少要继续进行的文件数量。

>>> import os.path
>>> import time
>>> tmp_fname = '/tmp/tst'
>>> with open(tmp_fname, 'w') as f:
...     pass
...
>>> os.path.getctime('/tmp/tst')
1383596461.0
>>> time.ctime(os.path.getctime(tmp_fname))
'Mon Nov  4 20:21:01 2013' # changed 
于 2013-11-04T20:21:48.037 回答
0

按时间戳创建文件夹,像往常一样写日志,然后按时间戳搜索文件夹。

import time
import os

directory = str(time.time())
log_file = 'random_leters'
if not os.path.exists(directory):
    os.makedirs(directory)
path = 'path_to_directory'
file_path = os.path.join(path, log_file)
#Some method of writing to logs
with open(file_path, 'w') as f:
    '''
    Write to log file
    '''

time_range = [start_time, finish_time]

for i in range(start_time, finish_time):
    if os.path.exists(os.path.join(path_to_logs, i)):
        '''
        Read Files
        '''

您将需要使您的时间可迭代并使用它们创建路径,但这会起作用。

于 2013-11-04T20:19:29.773 回答