2015-07-25

Karaf + Log4j2

First of all, Log4j2 for Karaf is provided by Pax Logging which requires pax-logging-api-1.8.x.

Dependencies

  • Apache Karaf 2.4.3 (the version for the example below)
  • pax-logging-log4j2-1.8.3 (http://search.maven.org/#search|ga|1|pax-logging-log4j2)
  • jackson-annotations-2.4.6
  • jackson-core-2.4.6
  • jackson-databind-2.4.6.1
  • jackson-dataformat-yaml-2.4.6 (if you choose YAML as your log4j2 configuration format which is the one I prefer because it's much more human-readable than XML and JSON)
  • disruptor-3.3.2 (if using asynchronous loggers)

startup.properties

#org/ops4j/pax/logging/pax-logging-service/1.8.3/pax-logging-service-1.8.3.jar=8
org/ops4j/pax/logging/pax-logging-log4j2/1.8.3/pax-logging-log4j2-1.8.3.jar=8

# Add other libraries you need below
com/fasterxml/jackson/core/jackson-annotations/2.4.6/jackson-annotations-2.4.6.jar=35
com/fasterxml/jackson/core/jackson-core/2.4.6/jackson-core-2.4.6.jar=35
com/fasterxml/jackson/core/jackson-databind/2.4.6.1/jackson-databind-2.4.6.1.jar=35
com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.4.6/jackson-dataformat-yaml-2.4.6.jar=35
com/lmax/disruptor/3.3.2/disruptor-3.3.2.jar=35

org.ops4j.pax.logging.cfg

org.ops4j.pax.logging.log4j2.config.file = ${karaf.etc}/log4j2.yaml

# Use asynchronous logger for all loggers
#org.ops4j.pax.logging.log4j2.async = false

log4j2.yaml


Create your log4j2.yaml in ${karaf.etc} and then you can configure log4j2 in it as normal Java application.

Furthermore, migrate log4j.rootLogger = INFO, osgi:VmLogAppender in log4j settings to log4j2.

appenders:
  PaxOsgi:
    name: paxosgi
    filter: VmLogAppender
loggers:
  root:
    level: INFO
    AppenderRef:
      - ref: paxosgi