在设置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;
}
}
有人知道如何解决此问题吗?
答案 0 :(得分:1)
您可以使用否定正则表达式来拦截所有未定向到应用程序的请求,并在其中定义access_log指令。然后为应用定义其他位置
location ~ ^((?!app).)*$ {
access_log /var/log/nginx/not-an-app.access.log;
}
location /app {
access_log /var/log/nginx/app.access.log;
}
不过,我认为这有点费力,在将其投入生产之前,我会对此进行测试。
答案 1 :(得分:0)
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
块都嵌套在默认的“位置”内。