首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nginx日志用于定位

nginx日志用于定位
EN

Stack Overflow用户
提问于 2018-10-12 15:24:35
回答 2查看 5.5K关注 0票数 5

我需要一些帮助来设置nginx日志,这样它们就不会被复制。

我的配置如下。我想要实现的是,所有的日志,比如说,http://example.com/app到文件app.access.log和其余的网站日志到文件main.access.log

然而,下面的配置将应用程序日志记录到app.access.log和main.access.log。

代码语言:javascript
运行
复制
server {

       access_log /var/log/nginx/main.access.log;


       location /app {
           access_log /var/log/nginx/app.access.log;
       }
}

你知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2018-10-12 16:19:56

您可以使用一个否定正则表达式来拦截所有未定向到app的请求,并在那里定义access_log指令。然后为应用程序定义另一个位置

代码语言:javascript
运行
复制
location ~ ^((?!app).)*$ {
        access_log /var/log/nginx/not-an-app.access.log;
   }

location /app { 
       access_log /var/log/nginx/app.access.log;
   }

我认为这有点牵强,在投入生产之前,我会对它进行地狱般的测试。

票数 2
EN

Stack Overflow用户

发布于 2018-10-12 16:20:16

access_log指令包含一个可用于控制日志记录的if=condition。

例如:

代码语言:javascript
运行
复制
map $request_uri $loggable {
    ~^/app  0;
    default 1;
}
server {
    access_log /var/log/nginx/main.access.log if=$loggable;
    ...
}

详情请参见this document

另一种方法是将所有内容记录在一起,然后使用grep将其拆分为两个单独的文件。

受@Andrea解决方案的启发,您还可以使用此模式:

代码语言:javascript
运行
复制
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中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52774392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档