Logging with P3/COBOL
P3/COBOL is using SLF4J with Logback.
This tutorial shows, how to:
- How to use the LOGGER Syntax in a P3/COBOL program
- How to specify a custom
logback.xmlconfiguration - How to different types of
Appenders
P3/COBOL Logging Syntax
Embedded Java
This offers the possibility adding additional logging of the application. A P3/COBOL program can use the LOGGER, for example:
working-storage section.
01 var pic x(20) value "Hey, Logger!".
procedure division.
main section.
java
LOGGER.debug("var value=[{}]", `var as string`.trim());
end-java
stop run.Custom logback.xml
To specify a custom logback.xml for the JVM, the following Java property can be added as a VM argument:
-Dlogback.configurationFile=logback.xmlLogback Appenders
Console
The ConsoleAppender can be used for simple logging to the Console (stdout).
logback.xml
<configuration>
<appender name="P3CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>P3: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{33} - %m%n</pattern>
</encoder>
</appender>
<logger name="com.turrettech.p3cobol.app" level="debug" />
<root level="OFF">
<appender-ref ref="P3CONSOLE"/>
</root>
</configuration>File
The FileAppender can be used for logging to a file.
logback.xml
<configuration>
<appender name="P3FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<encoder>
<pattern>P3: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{33} - %m%n</pattern>
</encoder>
</appender>
<logger name="com.turrettech.p3cobol.app" level="debug" />
<root level="OFF">
<appender-ref ref="P3FILE"/>
</root>
</configuration>Rolling (File)
The RollingFileAppender can be used for long-term logging to a file with the option to set limits, like:
- maximum file size
- maximum size of all log files
- maximum number of all log files
- etc.
logback.xml
<configuration>
<appender name="P3FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>myApp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>myApp.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>P3: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{33} - %m%n</pattern>
</encoder>
</appender>
<logger name="com.turrettech.p3cobol.app" level="debug" />
<root level="OFF">
<appender-ref ref="P3FILE"/>
</root>
</configuration>