我正在使用Flask应用程序来解决车辆路线问题。它收到大量我希望在常规日志消息(例如app.logger.info(..)
)之外进行记录的请求(每个请求约5MB),因为它们只会使日志变得不可读。
我的想法是将最后一个 n 请求作为带有时间戳的json文件保存在一个单独的文件夹中。我将编写自己的函数来执行此操作。我想知道您之前是否使用过这种类型的设置以及如何实现它。我在Python的模块logging
中找不到任何东西可以帮我完成这个任务。
答案 0 :(得分:1)
我不建议使用记录器模块来保存大型json文件,尤其是如果您还希望格式化它们以供人类使用时。
我实际上曾经遇到过与您相同的问题,并通过编写以下函数解决了该问题:
def json_to_file(file_to_write, json_to_dump):
max_files = 10
file_list = sorted(glob.glob("your pattern here"))
if len(file_list) > max_files:
os.remove(file_list[0])
with open(file_to_write, "w+") as my_file:
json.dump(json_to_dump, my_file, indent=4)
您可以将file_to_write变量设置为unix或utc时间戳-无论如何,这就是我要做的事情。
编辑:添加了“最大n个文件”部分。 只需确保您使用的glob模式正确!
答案 1 :(得分:1)
在这种情况下,我认为您应该忽略日志记录模块。
建立目录并在该目录中创建文件。
您可以使用当前日期时间作为文件名。
它具有创建唯一名称的偏执方式:
import datetime
import os
import random
request_dir = '/tmp'
content =':-)'
now = datetime.datetime.now()
file_name = '%s_%s_%s.json' % (now.strftime('%Y-%m-%d_%H%M%S'), '%06d' % now.microsecond,
random.randint(100000000, 999999999))
with open(os.path.join(request_dir, file_name), 'wb') as fd:
fd.write(content)
“删除目录中的旧条目”部分保留不变。因为文件名可以排序,所以这并不困难。
答案 2 :(得分:0)
如果要使用python记录器,可以使用FileHandler
指定它的写入位置,如下所示:
fh = logging.FileHandler(filename=os.path.join(path_to_log_directory, log_filename))
fh.setLevel(LOG_LEVEL)