Default Logging Behavior
By default, log messages are recorded with the following configuration:
When IG starts, log messages for IG and third-party dependencies, such as the ForgeRock Common Audit framework, are displayed on the console and written to
$HOME/.openig/logs/route-system.log
, where$HOME/.openig
is the instance directory.When a route is accessed, log messages for requests and responses passing through the route are written to a log file in
$HOME/.openig/logs
, and named by the route name or filename, where$HOME/.openig
is the instance directory.For more information, see "Capturing Log Messages for Routes" and "CaptureDecorator".
By default, log messages with the level
INFO
or higher are recorded, with the titles and the top line of the stack trace. Messages on the console are highlighted with a color related to their log level.
The content and format of logs in IG is defined by the reference logback.xml
delivered with IG. This file defines the following configuration items for logs:
A root logger to set the overall log level, and to write all log messages to the
SIFT
andSTDOUT
appenders.A
STDOUT
appender to define the format of log messages on the console.A
SIFT
appender to separate log messages according to the keyrouteId
, to define when log files are rolled, and to define the format of log messages in the file.An exception logger, called
LogAttachedExceptionFilter
, to write log messages for exceptions attached to responses.
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright 2016-2019 ForgeRock AS. All Rights Reserved Use of this code requires a commercial software license with ForgeRock AS. or with one of its affiliates. All use shall be exclusively subject to such license between the licensee and ForgeRock AS. --> <configuration> <!-- Avoid logs to be flooded in case of repetitive messages. Configuration properties: * AllowedRepetitions (int): threshold above which same messages won't be logged anymore * CacheSize (int): Remove eldest entry when hitting max size --> <!--<turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter" />--> <!-- Allow configuration of JUL loggers within this file, without performance impact --> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%nopex[%thread] %highlight(%-5level) %boldWhite(%logger{35}) @%mdc{routeId:-system} - %message%n%highlight(%rootException{short})</pattern> </encoder> </appender> <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <key>routeId</key> <defaultValue>system</defaultValue> </discriminator> <sift> <!-- Create a separate log file for each <key> --> <appender name="FILE-${routeId}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${instance.dir}/logs/route-${routeId}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- Rotate files daily --> <fileNamePattern>${instance.dir}/logs/route-${routeId}-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- each file should be at most 100MB, keep 30 days worth of history, but at most 3GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} | %-5level | %thread | %logger{20} | @%mdc{routeId:-system} | %message%n%xException</pattern> </encoder> </appender> </sift> </appender> <!-- Disable logs of exceptions attached to responses by defining 'level' to OFF --> <logger name="org.forgerock.openig.filter.LogAttachedExceptionFilter" level="INHERITED" /> <root level="${ROOT_LOG_LEVEL:-INFO}"> <appender-ref ref="SIFT" /> <appender-ref ref="STDOUT" /> </root> </configuration>