我需要一些帮助来设置nginx日志,这样它们就不会被复制。
我的配置如下。我想要实现的是,所有的日志,比如说,http://example.com/app到文件app.access.log和其余的网站日志到文件main.access.log
然而,下面的配置将应用程序日志记录到app.access.log和main.access.log。
server {
access_log /var/log/nginx/main.access.log;
location /app {
access_log /var/log/nginx/app.access.log;
}
}
你知道怎么解决这个问题吗?
发布于 2018-10-12 16:19:56
您可以使用一个否定正则表达式来拦截所有未定向到app的请求,并在那里定义access_log指令。然后为应用程序定义另一个位置
location ~ ^((?!app).)*$ {
access_log /var/log/nginx/not-an-app.access.log;
}
location /app {
access_log /var/log/nginx/app.access.log;
}
我认为这有点牵强,在投入生产之前,我会对它进行地狱般的测试。
发布于 2018-10-12 16:20:16
access_log
指令包含一个可用于控制日志记录的if=condition。
例如:
map $request_uri $loggable {
~^/app 0;
default 1;
}
server {
access_log /var/log/nginx/main.access.log if=$loggable;
...
}
详情请参见this document。
另一种方法是将所有内容记录在一起,然后使用grep
将其拆分为两个单独的文件。
受@Andrea解决方案的启发,您还可以使用此模式:
server {
location / {
access_log /var/log/nginx/main.access.log;
location /foo { ... }
location /bar { ... }
...
}
location /app {
access_log /var/log/nginx/app.access.log;
}
}
因此,顶层只有两个顶层location
块,所有其他location
块都嵌套在默认的` `location中。
https://stackoverflow.com/questions/52774392
复制相似问题