0

My app is using spring log4j2 and uses slf4j api to write log to separate log file "application.log".

This app gets deployed to tomcat v8 along with other apps. All app share common log4j2 configuration and writes to common logfile 'application.log'.

We have a log rotation policy of 250 mb and when the log file rotates the logs are not written to the logfile surprising only one app among all the app is able to write to the log file.

I'm able to reproduce this locally too. Can you please help in fixing this issue.

The other Please find the log4j2.xml config below.

JAR VERSIONS

  • slf4j-api 1.7.21
  • log4j-slf4j-impl 2.5
  • log4j-api 2.5
  • log4j-core 2.5
  • log4j-web 2.5

Log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="api-config" status="trace" monitorInterval="30">
  <Properties>
    <Property name="logdir">/Users/kramesan/microservices-config/logs</Property>
  </Properties>
  <Appenders>

    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%X{_requestId} %X{authToken} %X{urlEmployeeId} %X{urlCompanyId} [%X{authEmplIds}] [%X{authCompanyIds}] %d{yyy
y-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </Console>

    <RollingFile name="ApplicationLogRollingFile" fileName="${logdir}/application.log"
      filePattern="${logdir}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <JSONLayout locationInfo="true" complete="true" compact="true" eventEol="true" properties="true" />
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB" />
      </Policies>
      <DefaultRolloverStrategy max="20" />
    </RollingFile>

    <RollingFile name="AuditLogRollingFile" fileName="${logdir}/audit/api-audit.log"
      filePattern="${logdir}/audit/$${date:yyyy-MM}/api-audit-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
            <Pattern>%X{_requestId} %X{authToken} %X{urlEmployeeId} %X{urlCompanyId} [%X{authEmplIds}] [%X{authCompanyIds}] %m%n</Pattern>
      </PatternLayout>
      <!-- JSONLayout locationInfo="true" complete="true" compact="true" eventEol="true" properties="true" -->
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="250 MB" />
      </Policies>
      <DefaultRolloverStrategy max="20" />
    </RollingFile>
        <Async name="ApplicationLogAsync" bufferSize="262144">
         <AppenderRef ref="ApplicationLogRollingFile"/>
     </Async>

     <Async name="AuditLogAsync" bufferSize="262144">
         <AppenderRef ref="AuditLogRollingFile"/>
     </Async>

 </Appenders>
 <Loggers>
     <!--  All the 3rd Party frameworks -->
     <Logger name="org.springframework" level="warn" />

     <Logger name="org.hibernate" level="warn" />

<!-- common package name for all the business application level code -->
     <Logger name="com.trinet" level="info" />

     <!-- Audit Loggger This is used for spring aspect to log before and after execution --> 
     <Logger name="AuditLogger" level="info">
         <AppenderRef ref="AuditLogAsync" />
     </Logger>

     <Root level="info">
         <AppenderRef ref="ApplicationLogAsync" />
     </Root>
 </Loggers>
</Configuration>
krrish0690
  • 51
  • 2
  • 11

1 Answers1

0

Please, edit your Logger name. Logger name property needs package path.

AS-IS

...
<Logger name="AuditLogger" level="info">
...

TO-BE

...
<Logger name="com.foo.bar.AuditLogger" level="info" additivity="false">
...

or

...
<Logger name="com.foo.bar.*" level="info" additivity="false">
...

I think you'd better write property additivity Because your Logger works two times com.foo.bar.AuditLogger Logger and Root Logger. so you additivity to false then it works each.

reference link : Additivity

Han
  • 263
  • 1
  • 8
  • Thanks for the comment, we have two loggers as you can see I've have the logger as you suggested com.companyname that does the application level logging and the auditlogger is general logger which is used only in aspect pointcut around code to log before and after execution, I can see propper log in the log file with the correct package name . thanks – krrish0690 May 06 '20 at 06:16
  • @krrish0690 Good luck! – Han May 06 '20 at 06:24