Dynamical Logging

The OAP server leverages log4j2 to manage the logging system. log4j2 supports changing the configuration at runtime, but you have to update the XML configuration file manually, which could be time-consuming and prone to manmade mistakes.

Dynamical logging, which depends on dynamic configuration, provides us with an agile way to update all OAP log4j configurations through a single operation.

The key of the configuration item is core.default.log4j-xml, and you can select any of the configuration implements to store the content of log4j.xml. In the booting phase, once the core module gets started, core.default.log4j-xml would come into the OAP log4j context.

If the configuration is changed after the OAP has started, you have to wait for a while for the changes to be applied. The default value is 60 seconds, which you could change through configuration.<configuration implement>.peroid in application.yaml.

If you remove core.default.log4j-xml from the configuration center or disable the configuration module, log4j.xml in the config directory would be affected.

Caveat: The OAP only supports the XML configuration format.

This is an example on how to config dynamical logging through a ConfigMap in a Kubernetes cluster. You may set up other configuration clusters following the same procedures.

apiVersion: v1
  core.default.log4j-xml: |-
    <Configuration status="WARN">
         <Console name="Console" target="SYSTEM_OUT">
           <PatternLayout charset="UTF-8" pattern="%d - %c - %L [%t] %-5p %x - %m%n"/>
         <logger name="io.grpc.netty" level="INFO"/>
         <logger name="org.apache.skywalking.oap.server.configuration.api" level="TRACE"/>
         <logger name="org.apache.skywalking.oap.server.configuration.configmap" level="DEBUG"/>
         <Root level="WARN">
           <AppenderRef ref="Console"/>
kind: ConfigMap
    app: collector
    release: skywalking
  name: skywalking-oap
  namespace: default