🛠️ P3/COBOL 25.1.0-SNAPSHOT is available for preview.
Tutorials
Logging (slf4j/logback)

Logging with P3/COBOL

P3/COBOL is using SLF4J with Logback.

This tutorial shows, how to:

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.xml

Logback 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>