具有日志循环的JBoss访问日志
我试图告诉我的jboss写一个包含我需要的所有信息的访问日志,并使用每日日志循环。到目前为止,这还不是一个问题。最终目标是使用logstash转发器将所有访问日志条目发送到elk堆栈。也没什么大不了的。现在的问题是定义访问日志的名称 JBoss提供了开箱即用的日志循环,但为每个日志文件添加了一个时间戳,因此今天的文件也有一个时间戳后缀 我想要实现的是与tomcat或jbosses server.log相同的行为。这意味着今天的文件应该命名为access.log,并且只有当今天的文件变成昨天的文件并因此旋转到Inatve状态时,才会添加后缀 我的jboss配置如下所示:具有日志循环的JBoss访问日志,jboss,jboss7.x,logstash-forwarder,Jboss,Jboss7.x,Logstash Forwarder,我试图告诉我的jboss写一个包含我需要的所有信息的访问日志,并使用每日日志循环。到目前为止,这还不是一个问题。最终目标是使用logstash转发器将所有访问日志条目发送到elk堆栈。也没什么大不了的。现在的问题是定义访问日志的名称 JBoss提供了开箱即用的日志循环,但为每个日志文件添加了一个时间戳,因此今天的文件也有一个时间戳后缀 我想要实现的是与tomcat或jbosses server.log相同的行为。这意味着今天的文件应该命名为access.log,并且只有当今天的文件变成昨天的文件
<subsystem xmlns="urn:jboss:domain:logging:1.3">
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<periodic-rotating-file-handler name="ACCESS" autoflush="true">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="access.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<logger category="jacorb">
<level name="WARN"/>
</logger>
<logger category="jacorb.config">
<level name="ERROR"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="FILE"/>
<handler name="ACCESS"/>
</handlers>
</root-logger>
</subsystem>
下面是启用日志循环的访问日志配置(具有上面提到的时间戳行为)。当我设置rotate=“false”时,我会得到一个未经评分的access.log
<subsystem xmlns="urn:jboss:domain:web:1.5" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
<access-log pattern=""%{HOST}i" - %h %t "%m" "%U" - "%q" - "%H" - %s %B "%{User-Agent}i" %T %D "%p"" prefix="access.log" rotate="true">
<directory path="."/>
</access-log>
</virtual-server>
</subsystem>
现在我看到了两种将日志文件发送到我的麋鹿堆栈的方法。首先是在不带时间戳的情况下写入access.log,并在循环时添加时间戳,以便logstash转发器始终可以读取access.log。其次,设置转发器配置以始终检查最新的access.log文件。这样,时间戳文件名就不会成为问题。但我不知道这是否可能
如果有任何建议,我将不胜感激。谢谢和问候。塞巴斯蒂安注意
- 以下溶液在EAP 7.0/Wildfly 10上进行测试李>
- 下面显示的所有配置都是在
standalone.xml中完成的
<access-log .... rotate="true" />
重要信息:不要忘记http侦听器上的record request start time=“true”
,否则将无法获得任何计时日志
在中,您是否考虑过使用自己的阀门来满足您的需求?在我看来,这不是免费的,但我给你举了一个例子:
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
...
<server name="default-server">
<http-listener name="default" socket-binding="http" record-request-start-time="true" redirect-socket="https" />
<https-listener name="https" socket-binding="https" record-request-start-time="true" security-realm="ApplicationRealm" />
<host name="default-host" alias="localhost">
<!-- how to access log see https://access.redhat.com/solutions/2423311 -->
<!-- access log pattern see http://undertow.io/javadoc/1.3.x/io/undertow/server/handlers/accesslog/AccessLogHandler.html -->
<!-- Hint: access log is sent to server log (use-server-log="true") in order to add proper log file rolling/purging and set a readable timestamp -->
<access-log pattern="%h %l %u "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" "%{i,COOKIE}" "%{o,SET-COOKIE}" %S "%I" %T" use-server-log="true"/>
...
</host>
</server>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:3.0">
...
<!-- log rotate access.log by size to avoid disk-full -->
<size-rotating-file-handler name="ACCESS" autoflush="true">
<formatter>
<pattern-formatter pattern="[%d] - %s%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="access.log"/>
<rotate-size value="10485760"/>
<max-backup-index value="5"/>
<append value="true"/>
</size-rotating-file-handler>
...
<logger category="io.undertow.accesslog" use-parent-handlers="false">
<handlers>
<handler name="ACCESS"/>
</handlers>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
...
</subsystem>