Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Reference for the logging standardization effort: Jakarta Best Practice Proposal for Standardized Logging Fields - v2

JSON Approach

This has not been successfully tested on any other repo, but the CPS team implemented console JSON logging by adding the following to the XML files:

Add this where the appenders are for STDOUT and delete the old STDOUT appender (if there is one):

...

<configuration scan="true" scanPeriod="30 seconds" debug="false">

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <springProperty scope="context" name="username" source="security.auth.username"/>
    <springProperty scope="context" name="loggingFormat" source="logging.format"/>
    <property name="currentTimeStamp" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}"/>

    <appender name="

...

jsonConsole"
              class="ch.qos.logback.core.ConsoleAppender">

...

        <encoder class="

...

net.

...

logstash.logback

...

.encoder.

...

LoggingEventCompositeJsonEncoder">

...

            <providers>

...


                <pattern>

...


                    <omitEmptyFields>true</omitEmptyFields>
                    <pattern>
                        {
                        "logTimeStamp": "$

...

{currentTimeStamp:-

...

}",

...

                        "logTypeName": "",

...


                        "logLevel": "%level",

...


                        "traceId": "%X

...

{traceId:-

...

}",

...


                        "statusCode": "",

...

                        "principalId": "$

...

{username:-

...

}",

...


                        "serviceName": "$

...

{springAppName:-

...

}",

...


                        "message": "%message",

...


                        "spanId": "%X

...

{spanId:-

...

}",

...


                        "processId": "$

...

{PID:-

...

}",

...


                        "threadName": "%thread",

...


                        "class": "%logger

...

{40

...

}",

...


                        "exception": "

...

%wEx"
                        }
                    </pattern>

...

                </pattern>

...


            </providers>

...

        </encoder>
    </appender>

    <appender name="asyncConsole" class="ch.qos.logback.classic.AsyncAppender">
        <if condition='property("loggingFormat").contains("json")'>
            <then>
                <appender-ref ref="jsonConsole" />
            </then>
            <else>
                <appender-ref ref="CONSOLE" />
            </else>
        </if>
    </appender>

    <root level="INFO">
        <appender-ref ref="asyncConsole" />
    </root>

</configuration>
Wiki Markup

Image Added

Depending on how the logging files are setup, this could be added in the main XML or a separate file that has the property elements in it:

...

  1. You may have to build the project from a subdirectory rather than the base project directory. This CI Management repo will help clarify where each of the projects are building from to better identify the subdirectory you should build from: https://github.com/onap/ci-management/tree/master/jjb/dcaegen2


Misc Resources:

Git Review: Setting Up Your Development Environment#git-review(optional)

ONAP Dev Env Overview: Development Procedures and Policies

Pushing to Gerrit: https://wiki.web.att.com/pages/viewpage.action?spaceKey=DPD&title=Pushing+Code+to+ONAP+Gerrit

Jira Ticket for DCAE logging Specs:

Jira Legacy
serverSystem Jira
serverId4733707d-2057-3a0f-ae5e-4fd8aff50176
keyDCAEGEN2-3257

CPS Logback POC: CPS-986 : Asynchronous Communication Logging

CPS Jira:

Jira Legacy
serverSystem Jira
serverId4733707d-2057-3a0f-ae5e-4fd8aff50176
keyCPS-986

CPS Gerrit: https://gerrit.onap.org/r/c/cps/+/128801/13/cps-service/src/main/resources/logback-spring.xml