Page History
Table of Contents |
---|
Scope
- JS7 makes use of uses Log4j2 for logging purposes. Log rotation is required to prevent log files from filling up disk space.
- The default configuration includes to limit allows disk space consumption to be limited for each of Controller, Agent and JOC Cockpit.
- The configuration to rotate for the rotation of log files is similar for any all JS7 componentsproducts.
Log4j2 Configuration Files
The Log4j2 configuration file is log4j2.xml that is found with the following default locations as per JS7 component:
...
- Note that log output from orders and jobs in workflow is not stored with log files but is immediately added to the JS7 - Database and JS7 - History respectively.
Log4j2 Configuration
For the location of Log4j2 configuration files see the JS7 - Log Files and Locations articleChanges to the Log4j2 configuration are applied within 60s and do not require the JS7 component to be restarted.
Log Rotation Strategy
By default log files are rotated on the following events trigger log file rotation by default:
- if the size of a single log file exceeds 100MB or
- on day change, i.e. on midnight of the time zone specified in the Log4j2 configuration.
If a log file is rotated then its name is appended the current date and a running number. In addition, in addition the log file is compressed, e.g. a log file controller.log
becomes controller-2021-01-31-1.log.gz
. The running number 1
indicates the first rotation log file of the day being rotated.
Users are free to modify the Log4j2 configuration to apply their individual own log rotation strategy , - see below examples explainedthe explanations for the examples below.
As an exception to this rule, the watchdog log files for Controller and Agent are not subject to log rotation. The watchdog log file captures any output before the associated application is started, e.g. output of the Controller Windows Service, and therefore does not use Log4j2 for logging. The watchdog log files therefore should not grow but should report a few lines only in situations when a Controller or Agent could not be started.
Log Retention
By default the log retention period for any log files is 30 days , i.e. log files older than this will be removed.This does not apply to the and storage consumption of all log files is limited to 5GB. This translates to the fact that log files that are older than 30 days will be removed. If storage consumption exceeds 5GB then younger log files will be removed too.
Users are free to modify the Log4j2 configuration to apply their own log retention period, see the explanations for the examples below.
Log retention does not apply to:
- The
audit.log
log file
...
- , which is rotated but is not subject to log retention and therefore is not removed
...
- or truncated. For compliance reasons the
audit.log
remains in place for an arbitrary duration. It's the user's responsibility to purge theaudit.log
according to their requirements. - The
watchdog.log
files of Controller and Agent. These files hold any output created before the relevant application is started.
Configuration Files explained
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" shutdownHook="disable"> <Properties> <Property name="TimeZone">${env:SCHEDULERJS7_CONTROLLER_TZ:-Etc/UTC}</Property> <Property name="LogDir">${env:SCHEDULERJS7_CONTROLLER_LOGS:-logs}</Property> <Property name="LogBasename">${env:SCHEDULERJS7_CONTROLLER_APPNAME:-controller}</Property> <Property name="RetainDays">30d</Property> <Property name="MaxSizeOfRolledOverFiles">5GB</Property> <Property name="MaxSizePerFile">100MB</Property> <!-- Log level of the Root Logger. --> <Property name="RootLogLevel">INFO</Property> <!-- Configuration for a 2nd debug log file (OFF|DEBUG|TRACE) If this value is set to DEBUG or TRACE then the above RootLogLevel has to have the same value. --> <Property name="LogLevelOfDebugLog">OFF</Property> </Properties> <Appenders> <Console name="console" target="SYSTEM_ERR"> <PatternLayout pattern="%highlight{%d{EE HH:mm:ss.SSS}{${TimeZone}} %-5level{INFO=info, DEBUG=debug, TRACE=trace} %logger - %message}{WARN=magenta}%n"/> </Console> <RollingRandomAccessFile name="fileInfo" fileName="${LogDir}/${LogBasename}.log" filePattern="${LogDir}/${LogBasename}-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false"> <PatternLayout pattern="%d{ISO8601}{${TimeZone}} %-5level{INFO=info, DEBUG=debug, TRACE=trace} %logger - %message%n" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/> </Policies> <DefaultRolloverStrategy fileIndex="nomax"> <Delete basePath="${LogDir}/" followLinks="true"> <IfFileName glob="*/${LogBasename}-*.log.gz" /> <IfAny> <IfLastModified age="${RetainDays}" /> <IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <RollingRandomAccessFile name="fileDebug" fileName="${LogDir}/${LogBasename}-debug.log" filePattern="${LogDir}/${LogBasename}-debug-%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false"> <PatternLayout pattern="%d{ISO8601}{${TimeZone}} %-5level{INFO=info, DEBUG=debug, TRACE=trace} %logger - %message%n" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/> </Policies> <DefaultRolloverStrategy fileIndex="nomax"> <Delete basePath="${LogDir}/" followLinks="true"> <IfFileName glob="*/${LogBasename}-*.log.gz" /> <IfAny> <IfLastModified age="${RetainDays}" /> <IfAccumulatedFileSize exceeds="${MaxSizeOfRolledOverFiles}"/> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> </Appenders> <Loggers> <Logger name="spray" level="INFO"/> <Logger name="akka" level="INFO"/> <Logger name="akka.event.slf4j.Slf4jLogger" level="WARN"/> <Logger name="js7.common.akkahttp.web.auth.GateKeeper" level="ERROR"/> <Root level="${RootLogLevel}"> <!--AppenderRef ref="console" level="ERROR"/--> <AppenderRef ref="fileInfo" level="INFO"/> <AppenderRef ref="fileDebug" level="${LogLevelOfDebugLog}"/> </Root> </Loggers> </Configuration> |
...
Explanation:
- The Controller and Agent Log4j2 configuration files are the same except for the fact that environment variables in lines 4-6 for Agents use:
<Property name="TimeZone">${env:JS7_AGENT_TZ:-Etc/UTC}</Property>
<Property name="LogDir">${env:JS7_AGENT_LOGS:-logs}</Property>
<Property name="LogBasename">${env:JS7_AGENT_APPNAME:-agent}</Property>
- To modify the time zone that is applied to log entries and to the point in time of when log rotation occurs, modify
<Property name="TimeZone">Etc/UTC</Property>
. The time zone is specified during the startscript by setting the environment variableSCHEDULER_TZ
by the Controller and Agent start scripts that set the environment variablesJS7_CONTROLLER_TZ
andJS7_AGENT_TZ
respectively from the time zone reported by the operating system. - To enable the debug mode modify , change the
<property name="RootLogLevel">INFO</property>
toDEBUG
. In addition modify the value of and<property name="LogLevelOfDebugLog">OFF</property>
toDEBUG.
- To change the log retention period, modify
<Property name="RetainDays">30d</Property>
to some other value. Consider to Note the use of the suffix suffixesd
(ays),w
(eeks),m
(onths). - To limit the max. size of individual log files modify , modify
<Property name="MaxSizePerFile">100MB</Property>
to some other value. Consider to Note the use of the unitsMB
,GB
. - To limit space limit the storage consumption of all log files, modify
<Property name="MaxSizeOfRolledOverFiles">5GB</Property>
to some other value. Consider to Note the use of the unitsMB
,GB
.
JOC Cockpit Log4j2 Configuration
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Properties> <Property name="TimeZone">Etc/UTC</Property> <Property name="RetainDays">30d</Property> <Property name="MaxSizeOfRolledOverFiles">5 GB</Property> <Property name="MaxSizePerFile">100 MB</Property> <!-- Log level of the Root Logger. --> <Property name="RootLogLevel">INFO</Property> <!-- Configurations for 2nd debug log files (OFF|DEBUG|TRACE) If one of these values is set to DEBUG or TRACE then the above RootLogLevel has to have the same value. --> <Property name="JocLogLevel">OFF</Property> <Property name="ClusterLogLevelServiceClusterLogLevel">OFF</Property> <Property name="HistoryLogLevelServiceHistoryLogLevel">OFF</Property> <Property name="DailyPlanLogLevelServiceDailyPlanLogLevel">OFF</Property> <Property name="CleanupLogLevelServiceCleanupLogLevel">OFF</Property> <Property name="ServiceMonitorLogLevel">DEBUG</Property> <Property name="AuthLogLevel">OFF</Property> <Property name="ConnectionPoolLogLevel">OFF</Property> </Properties> <Appenders> <!-- Appender for audit log --> <RollingFile name="AuditLogAppender" fileName="${sys:user.dir}/logs/audit.log" filePattern="${sys:user.dir}/logs/audit-%d{yyyy-MM}-%i.log.gz" createOnDemand="true"> <PatternLayout pattern="%d{ISO8601}{${TimeZone}} %-5p %m%throwable{short}%n" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="${MaxSizePerFile}"/> </Policies> <DefaultRolloverStrategy fileIndex="nomax"/> </RollingFile> <!-- Appender for connection pool log --> ... </Appender> </Appenders> ... <Configuration> |
ExplanationsExplanation:
- To modify change the time zone that is applied to log entries and to the point in time of log rotation, modify the
<Property name="TimeZone">Etc/UTC</Property>
. The time zone is specified determined by the operating system during installation. - To change the log retention period, modify
<Property name="RetainDays">30d</Property>
to some other value. Consider to Note the use of the suffix suffixesd
(ays),w
(eeks),m
(onths). - To limit space storage consumption of all log files, modify
<Property name="MaxSizeOfRolledOverFiles">5 GB</Property>
to some other value. Consider to Note the use of the unitsMB
,GB
. - To limit the max. size of individual log files modify ,modify
<Property name="MaxSizePerFile">100 MB</Property>
to some other value. Consider to Note the use of the unitsMB
,GB
. - To enable the debug mode modify , change the
<property name="RootLogLevel">INFO</property>
toDEBUG
. In addition, modify the value of one or more of the following properties accordingly to enable debug output with the respective debug log file:Debug Log File Property joc-debug.log
<Property name="JocLogLevel">DEBUG</Property>
service-cluster-debug.log
<Property name="ClusterLogLevelServieClusterLogLevel">DEBUG</Property>
service-history-debug.log
<Property name="HistoryLogLevelServieHistoryLogLevel">DEBUG</Property>
service-dailyplan-debug.log
DailyPlanLogLevel<Property name="
ServiceDailyPlanLogLevel">DEBUG</Property>
service-cleanup-debug.log
<Property name="ServiceCleanupLogLevel">DEBUG</Property>
service-monitor-debug.log
<Property name="ServiceMonitorLogLevel">DEBUG</Property>
service-reports-debug.log
CleanupLogLevel<Property name="
ServiceReportsLogLevel">DEBUG</Property>
:authentication-debug.log
<Property name="AuthLogLevel">DEBUG</Property>
connection-pool-debug.log
<Property name="ConnectionPoolLogLevel">DEBUG</Property>