1
votes

Below is the log4j2.xml file that I have created. I have configured async_file.log for Asynchronous Logging and regular_file.log for regular and synchronous logging. The problem is that the log files get created, but the size of the files is zero and with no logs. All logs are coming to server.log file (JBOSS) and not to the 2 files that I had got configured for (async_file.log and regular_file.log).

  • Please let me know why the logs are NOT going to the log files that I have configured. Please help me with this or give me some direction or hint.

I am calling the two different loggers in the same class file by name DCLASS as shown below:

private static final transient Logger LOG = Logger.getLogger(DCLASS.class);

private static final transient Logger ASYNC_LOG = Logger.getLogger("ASYNC");

I have included the following jars in the Class Path:
1. log4j-api-2.0-beta8.jar
2. log4j-core-2.0-beta8.jar
3. disruptor-3.0.0.beta1.jar

My log4j2.xml is as below:

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="INFO">
  <appenders>
    <!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->

    <FastFile name="AsyncFastFile" fileName="../standalone/log/async_file.log" 
              immediateFlush="false" append="true">
      <PatternLayout>
        <pattern>%d %p %class{1.} [%t] %location %m %ex%n</pattern>
      </PatternLayout>
    </FastFile>

    <FastFile name="FastFile" fileName="../standalone/log/regular_file.log" 
              immediateFlush="true" append="true">
      <PatternLayout>
        <pattern>%d %p %class{1.} [%t] %location %m %ex%n</pattern>
      </PatternLayout>
    </FastFile>
  </appenders>

  <loggers>
    <!-- pattern layout actually uses location, so we need to include it -->
    <asyncLogger name="ASYNC" level="trace" includeLocation="true">
      <appender-ref ref="AsyncFastFile"/>
    </asyncLogger>

    <root level="info" includeLocation="true">
      <appender-ref ref="FastFile"/>
    </root>

  </loggers>
</configuration>
1

1 Answers

1
votes

The reason why the logs were not coming to the log files is because, I was using 'Logger' instead of 'LogManager'.

In the code, I had

private static final transient Logger ASYNC_LOG = Logger.getLogger("ASYNC");

The code should have been

private static final transient Logger ASYNC_LOG = Logmanager.getLogger("ASYNC");

When it is 'logger', then the compiler is looking into 'Log4j API' and when it is 'LogManager' it is looking into 'Log4j2 API'. Since I have configured everything to use Log4j2, by changing logger to LogManager, the logs started coming to the log files as expected.