Digipass S3 is now DigipassONE. This section is currently being updated to reflect our new name.

Example log4j2-nnl.xml

Prev Next

Below is an example log4j2-nnl.xml. Note that your copy of this file may differ.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="120" status="WARN">
    <Packages>
        <Package name="com.noknok.platform.auditlog"/>
    </Packages>
    <CustomLevels>
        <CustomLevel name="AUDIT" intLevel="125" />
    </CustomLevels>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>%d${NNL_LOG4J_TZ} [%t] [tenantId : $${ctx:nnlLogTenantId:-System}] [CorrelationId : $${ctx:correlationId:-NA}] %c %M - %p: %m%n</Pattern>
            </PatternLayout>
        </Console>
        <!-- RollingFile appender used for writing to nnl.log -->
        <RollingFile fileName="${sys:catalina.base}/logs/nnl.log" append="true" name="NNL_LOG_FILE" filePattern="${sys:catalina.base}/logs/nnl-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout>
                <Pattern>%d${NNL_LOG4J_TZ} [%t] [tenantId : $${ctx:nnlLogTenantId:-System}] [CorrelationId : $${ctx:correlationId:-NA}] %c %M - %p: %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="30" />
        </RollingFile>
        <!-- This routing appender takes ROUTINGKEY as the key which is put in the ThreadContext in CheckSumAppenderPolicy.java class. The ROUTINGKEY is basically the tenantId and based on the tenantId the Log file is generated for the respective tenant. This Routing appender is called by the AuditLogRewrite appender. -->
        <Routing name="AuditLogRouting">
            <Routes pattern="$${ctx:ROUTINGKEY}">
                <!-- This route takes the ThreadContext value for key ROUTINGKEY and creates the tenant specific audit log files. -->
                <Route>
                    <RollingFile name="Rolling-${ctx:ROUTINGKEY}" fileName="${sys:catalina.base}/logs/auditlogs/${ctx:ROUTINGKEY}/nnl-audit-${ctx:ROUTINGKEY}-${hostName}.log" filePattern="${sys:catalina.base}/logs/auditlogs/${ctx:ROUTINGKEY}/nnl-audit-${ctx:ROUTINGKEY}-${hostName}-%d{yyyyMMdd}-%i.log.gz" immediateFlush="true">
                        <PatternLayout>
                            <pattern>%m%n</pattern>
                        </PatternLayout>
                        <Policies>
                            <SizeBasedTriggeringPolicy size="100 MB" /> 
                            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                        </Policies>
                        <DefaultRolloverStrategy fileIndex="nomax" />
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <!--This Rewrite appender is invoked the Async Logger named "audit_logger". This appender calls the CheckSumAppenderPolicy and appender "AuditLogRouting" which routes the log to appropriate log files according to tenants.   -->
        <Rewrite name="AuditLogRewrite" ignoreExceptions="true">
            <CheckSumAppenderPolicy checkSumNeeded="true">
            </CheckSumAppenderPolicy>
            <AppenderRef ref="AuditLogRouting" />
        </Rewrite>
        <!-- Appender used for writing csv audit logs -->
        <Routing name="CsvAuditLogRouting">
            <Routes pattern="$${ctx:ROUTINGKEY}">
                <!-- This route takes the ThreadContext value for key ROUTINGKEY and creates the tenant specific csv audit log files. -->
                <Route>
                    <RollingFile name="Rolling-CSVAudit-${ctx:ROUTINGKEY}" fileName="${sys:catalina.base}/logs/csvauditlogs/${ctx:ROUTINGKEY}/nnl-csv-audit-${ctx:ROUTINGKEY}-${hostName}.log" filePattern="${sys:catalina.base}/logs/csvauditlogs/${ctx:ROUTINGKEY}/nnl-csv-audit-${ctx:ROUTINGKEY}-${hostName}-%d{yyyyMMdd}-%i.log" immediateFlush="true">
                        <PatternLayout>
                            <pattern>%m</pattern>
                        </PatternLayout>
                        <Policies>
                            <SizeBasedTriggeringPolicy size="100 MB" />
                            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                        </Policies>
                        <DefaultRolloverStrategy fileIndex="nomax" />
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <RollingFile name="NNL_ACCESS_LOG"               fileName="${sys:catalina.base}${sys:file.separator}logs${sys:file.separator}nnl-access.log" filePattern="${sys:catalina.base}${sys:file.separator}logs${sys:file.separator}nnl-access-%d{yyyy-MM-dd}-%i.log" immediateFlush="true" createOnDemand="true">
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB" />
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
            <DefaultRolloverStrategy max="30" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- Turn off unnecessary logging -->
        <Logger name="net.rubyeye" level="off" />
        <Logger name="com.google.code" level="off" />
        <Logger name="org.apache.http.wire" level="off" />
        <Logger name="org.appformer.maven.integration.embedder.MavenSettings" level="off" />
        <Logger name="io.netty.handler.ssl.OpenSsl" level="off" />
        <!-- Root logger used for writing the Auth Server logs to nnl.log file. It uses the appender 'NNL_LOG_FILE' configured above.-->
        <Root level="info">
            <!-- Uncomment to enable console logging <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="NNL_LOG_FILE" />
        </Root>
        <!-- Logger used for Audit Logging and status of audit logs. The Logger will invoke AuditLogRewrite appender which will then call CheckSumAppenderPolicy and AuditLogRouting appender.-->
        <Logger name="audit_logger" level="audit" includeLocation="false" additivity="false">
            <AppenderRef ref="AuditLogRewrite" />
        </Logger>
        <!-- Logger used for CSV Audit Logging. CSV logs will be routed to the CsvAuditLogRouting appender. -->
        <Logger name="csv_audit_logger" level="audit" includeLocation="false" additivity="false">
            <AppenderRef ref="CsvAuditLogRouting" />
        </Logger>
        <!-- Changes to billing_logger level will require a server restart to take effect -->
        <Logger name="billing_logger" level="off"></Logger>
        <Logger name="nnl_access_logger" level="info" includeLocation="false" additivity="false">
            <AppenderRef ref="NNL_ACCESS_LOG" />
        </Logger>
    </Loggers>
</Configuration>