在 JBoss EAP 7 访问日志上执行每小时 logrotate

Posted

技术标签:

【中文标题】在 JBoss EAP 7 访问日志上执行每小时 logrotate【英文标题】:Perform hourly logrotate on JBoss EAP 7 access log 【发布时间】:2017-12-04 06:22:40 【问题描述】:

默认情况下,JBoss EAP 7 每天轮换它的访问日志。 我需要将其设置为喜欢,HOURLY。

原因

我们有一个脚本可以自动下载 rotated 访问日志文件。 但是这样做^会大大增加CPU使用率(因为一天结束时的访问日志非常大,而且下载时我们的系统性能不幸降低)

我所知道的是,在 standalone.xml 中,我尝试添加以下内容以使 JBoss server 日志每小时轮换一次。

    <suffix value=".yyyy-MM-dd-HH"/>

但是这种方法不适用于访问日志(因为它的设置奇怪地放在了standalone.xml的不同部分)

我尝试过使用access-log 标签来获得以下任何一项。但它只是抛出一个错误。

    &lt;access-log suffix=".yyyy-MM-dd-HH" ... &lt;access-log rotate="hourly" ...

...我似乎找不到关于 JBoss EAP 7 的 standalone.xml 的非常详细的指南。我想我应该为 access-log 使用标签值部分。

请帮忙。有谁知道这样做的方法? :(

系统规格

Oracle Linux 6.9 JBoss EAP 7

谢谢和最好的问候。

【问题讨论】:

【参考方案1】:

尝试关注

<subsystem xmlns="urn:jboss:domain:logging:3.0">
    ...(snip)...
    <!-- size-based log rotation -->
    <size-rotating-file-handler name="access-log" autoflush="true">
        <formatter>
            <named-formatter name="access-log-formatter"/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="access.log"/>
        <rotate-size value="10m"/>
        <max-backup-index value="10"/>
        <append value="true"/>
    </size-rotating-file-handler>
    <! -- or custom interval (hourly) log rotation
    <periodic-rotating-file-handler name="access-log-custom" autoflush="true">
        <formatter>
            <named-formatter name="access-log-formatter"/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="access.log"/>
        <suffix value=".yyyy-MM-dd-HH"/>
        <append value="true"/>
    </periodic-rotating-file-handler>
    --->
    ...(snip)...
    <logger category="io.undertow.accesslog" use-parent-handlers="false">
        <handlers>
            <handler name="access-log"/>
        </handlers>
    </logger>
    ...(snip)...
    <formatter name="access-log-formatter">
        <pattern-formatter pattern="%s%n"/>
    </formatter>
</subsystem>

...(snip)...

<subsystem xmlns="urn:jboss:domain:undertow:3.1" statistics-enabled="true">
    ...(snip)...
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" record-request-start-time="true"/>
        <host name="default-host" alias="localhost">
            ...(snip)...
            <access-log use-server-log="true" pattern="%h %l %u %t &quot;%r&quot; %s %b &quot;%i,Referer&quot; &quot;%i,User-Agent&quot; &quot;%i,COOKIE&quot; &quot;%o,SET-COOKIE&quot; %S &quot;%I&quot; %T"/>
            ...(snip)...
        </host>
    </server>
    ...(snip)...
</subsystem>

【讨论】:

感谢您的建议!虽然目前我还不能在我们的环境中对此进行测试(因为其他开发人员仍在使用它)。 只是一个小问题:这部分&lt;access-log use-server-log... 是否意味着进入访问日志的内容现在将进入服务器日志文件?因为我们更喜欢让服务器日志和访问日志成为不同的文件。

以上是关于在 JBoss EAP 7 访问日志上执行每小时 logrotate的主要内容,如果未能解决你的问题,请参考以下文章

JBOSS EAP 7中的顺序消息处理

JBoss EAP 6.4.4 中的空日志文件(日志配置文件)

无法在 Jboss EAP 7.0 服务器中创建 oracle 数据源

JBoss EAP 7.3 上的 Primefaces 6 文件上传问题

在 DHCP 服务器 Linux 上启动 Jboss EAP 和 UnknownHostException

在 JBoss EAP 7 上注册服务器范围的 javax.ws.rs.client.ClientRequestFilter