django 如何在uwsgi中创建单个日志文件?

wqlqzqxt  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(108)

我使用下面的uwsgi日志配置文件为Django应用程序。它创建两个日志文件:

  1. access_log-2023-10-13.log
  2. app_log-2023-10-13.log
    现在我想再创建一个名为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
yb3bgrhw

yb3bgrhw1#

uWSGI documentation概述了如何使用--log-route将基于正则表达式的日志消息定向到不同的目的地。
但是,它没有提供将来自不同来源的合并日志组合到单个文件中的直接方法。
您需要创建一个简单的脚本来合并日志文件,该脚本可以安排每天运行,以将access_logapp_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()

但是我的日志文件每天都在使用日志轮换进行压缩。那么,为all_logs创建手动脚本是个好主意吗?
然后,可以在日志旋转/压缩之前每天调度脚本,以便每天生成all_logs.20xxMMJJ

相关问题