我试图告诉我的 jboss 写一个包含我需要的所有信息的访问日志,并使用每日日志轮换。到目前为止,这不是问题。最终目标是使用 logstash 转发器将所有访问日志条目发送到 elk 堆栈。也没什么大不了的。我现在遇到的问题是定义访问日志名称。
JBoss 提供开箱即用的日志轮换,但为每个日志文件添加了时间戳,因此今天的文件也有时间戳后缀。
我想要实现的是与 tomcat 或 jbosses server.log 相同的行为。这意味着今天的文件应该只命名为 access.log 并且只有在今天的文件变成昨天的文件并因此被轮换到不活动状态时才附加一个后缀。
我的 jboss 配置如下所示:
<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>
现在我看到了两种将日志文件发送到我的 elk 堆栈的方法。首先是写入没有时间戳的 access.log 并在轮换时添加时间戳,以便 logstash 转发器始终可以读取 access.log。其次是设置转发器配置以始终检查最新的 access.log 文件。这样,带时间戳的文件名就不会成为问题。但我不知道这是否可能。
我会很感激任何建议。谢谢并恭祝安康。塞巴斯蒂安