0

私のプログラムは現在、ログをディスクに書き込みます。ログ ファイルは、時刻とログ メッセージの 2 つのフィールドを持つシリアル化されたオブジェクトです。ファイル名はランダムな 32 文字の文字列です。

Django には、ユーザーが期間 (秒単位) と終了時刻 (任意のエポック タイムスタンプ) を入力できるログを表示できる Web UI もあり、endtime-duration から endtime までのすべてのログが表示されます。

私が現在していること:

  1. ユーザーが UI をロード/更新するたびに、ディスクからすべてのログを読み取る
  2. ログを時間順に並べ替える
  3. ログを吐き出す for ループを用意します。ログが endtime より新しい場合は継続し、endtime-duration より古いログに最初に遭遇すると中断します。

私がしたいこと:

  1. ユーザーが要求しているログのみを読み取るか、少なくとも毎回すべてを読み取るよりも適切に処理します。

制約:

  1. ログ ファイル名を変更することはできませんが、ログ ファイルを別の (サブ) フォルダーに保存することはできます
  2. キャッシュなし
  3. シングルスレッド (ログは、必要なすべてのログが読み取られた後にのみ表示され、部分的な表示はありません)

ありがとう!

4

2 に答える 2

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 に答える
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 に答える