我正在为 Django 应用程序使用下面的 uwsgi 日志配置文件。它创建两个日志文件:
现在我想再创建一个名为 all_logs-2023-10-13.log 的日志文件,其中包含
access + app
日志文件数据。有什么办法可以创建这个吗?
[uwsgi]
master = true
http-socket = xyz_port
memory-report = true
module = demo_app.wsgi
...
...
...
log-date = %%d/%%m/%%Y %%H:%%M:%%S %%Z
logformat-strftime = true
logger = stdio
log-format = %(addr) - %(user) [%(ftime)] "%(method) %(uri) %(proto)" %(status) %(size) %(referer) %(uagent) %(pid)
req-logger = file:/var/log/demo_app/access_log-@(exec://date +%%Y-%%m-%%d).log
logger = file:/var/log/demo_app/app_log-@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
uWSGI 文档概述了
--log-route
的使用,用于将基于正则表达式的日志消息定向到不同的目的地。您需要创建一个简单的脚本来合并日志文件,可以安排每天运行该脚本以将
access_log
和 app_log
合并到 all_logs
。
类似:
import datetime
def merge_logs():
date_suffix = datetime.datetime.now().strftime('%Y-%m-%d')
with open(f'/var/log/demo_app/access_log-{date_suffix}.log', 'r') as access_log, \
open(f'/var/log/demo_app/app_log-{date_suffix}.log', 'r') as app_log, \
open(f'/var/log/demo_app/all_logs-{date_suffix}.log', 'a') as all_logs:
for line in access_log:
all_logs.write(line)
for line in app_log:
all_logs.write(line)
if __name__ == "__main__":
merge_logs()