Java 如何在Wildfly 8上记录应用程序审核以分离文件

Java 如何在Wildfly 8上记录应用程序审核以分离文件,java,logging,wildfly,audit,Java,Logging,Wildfly,Audit,我有一个在Wildfly 8上运行的JavaEE应用程序,我想在其中启用审计日志记录。使用拦截器绑定和拦截器,我能够捕获所有相关的API调用 我想做的是将这些审计调用写入一个单独的审计日志文件。我尝试使用logback实现这个功能,在中的第二个答案的帮助下,我终于做到了这一点。第一个答复(即禁用系统日志记录)无效。但是,虽然此解决方案成功地将我的审核跟踪写入了一个单独的文件,但所有其他日志记录都停止写入它们的默认文件,并且只输出到控制台 我想要实现的是将所有常规日志写入常规文件(即server.

我有一个在Wildfly 8上运行的JavaEE应用程序,我想在其中启用审计日志记录。使用拦截器绑定和拦截器,我能够捕获所有相关的API调用

我想做的是将这些审计调用写入一个单独的审计日志文件。我尝试使用logback实现这个功能,在中的第二个答案的帮助下,我终于做到了这一点。第一个答复(即禁用系统日志记录)无效。但是,虽然此解决方案成功地将我的审核跟踪写入了一个单独的文件,但所有其他日志记录都停止写入它们的默认文件,并且只输出到控制台

我想要实现的是将所有常规日志写入常规文件(即server.log),默认情况下,但将我自己的自定义审核日志消息写入一个单独的文件(也每天滚动,将旧文件重命名为写入日期)

无论是使用Logback、log4j、Wildfly自己的日志系统,甚至是Wildfly CLI审核日志来完成这项工作,只要能够以最小的开销达到目的,都是无关紧要的。我正在考虑用一个简单的outputstream将其写入我自己的文件中,但是当有解决方案可以更有效地完成这项工作时,我觉得这是多余的

这是我的日志文件的外观:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="AUDIT-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/Applications/wildfly/standalone/log/logback/audit/audit.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS}: - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/Applications/wildfly/standalone/log/logback/server.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
        </encoder>
    </appender>
    <logger name="audit" level="INFO" additivity="false">
        <appender-ref ref="AUDIT-FILE"/>
    </logger>
    <logger name="org.jboss.resteasy.core.ExceptionHandler" level="ALL">
        <appender-ref ref="FILE" />
    </logger>
    <root level="ALL">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

/应用程序/wildfly/standalone/log/logback/audit/audit.log
日志文件。%d{yyyy-MM-dd}.log
%d{HH:mm:ss.SSS}:-%msg%n
/Applications/wildfly/standalone/log/logback/server.log
日志文件。%d{yyyy-MM-dd}.log
%d{HH:mm:ss.SSS}%-4相对[%thread]-5级别%logger{35}-%msg%n

通过修改Wildfly中的standalone.xml文件,我终于实现了我想要的。我添加了一个使用此文件处理程序的自定义文件处理程序和记录器。不需要定制的logback实现或类似的东西

    <subsystem xmlns="urn:jboss:domain:logging:2.0">
        <console-handler name="CONSOLE">
            <level name="INFO"/>
            <formatter>
                <named-formatter name="COLOR-PATTERN"/>
            </formatter>
        </console-handler>
        <periodic-rotating-file-handler name="FILE" autoflush="true">
            <formatter>
                <named-formatter name="PATTERN"/>
            </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="MYHANDLER" autoflush="true">
            <formatter>
                <named-formatter name="PATTERN"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="application-audit.log"/>
            <suffix value=".yyyy-MM-dd"/>
            <append value="true"/>
        </periodic-rotating-file-handler>
        <logger category="com.mycompany.myapplication">
            <level name="INFO"/>
            <handlers>
                <handler name="MYHANDLER"/>
            </handlers>
        </logger>
        <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>
        <logger category="org.jboss.security">
            <level name="TRACE"/>
        </logger>
        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="FILE"/>
            </handlers>
        </root-logger>
        <formatter name="PATTERN">
            <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
        </formatter>
        <formatter name="COLOR-PATTERN">
            <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
        </formatter>
    </subsystem>