16.3. Logging per Application
Overview
Using Mapped Diagnostic Context (MDC) logging, you create a separate log file for each of your applications. The basic idea of MDC logging is that you associate each logging message with a particular context (for example, by associating it with a set of key-value pairs). Later on, when it comes to writing the log stream, you can use the context data to sort or filter the logging messages in various ways.
Note
MDC logging is supported only by log4j and slf4j.
Application key
To use MDC logging, you must define a unique MDC key for each of your applications. The MDC key is a string that is associated with one application or logging context. At runtime, you can then use the application key to sort logging messages and write them into separate files for each application key.
Enabling per application logging
To enable per application logging:
- In each of your applications, edit the Java source code to define a unique application key.If you are using slf4j, add the following static method call to your application:
org.slf4j.MDC.put("app.name","MyFooApp");
If you are using log4j, add the following static method call to your application:org.apache.log4j.MDC.put("app.name","MyFooApp");
- Edit the
etc/org.ops4j.pax.logging
PID to customize the sift appender.- Set
log4j.appender.sift.key
toapp.name
. - Set
log4j.appender.sift.appender.file
to=${karaf.data}/log/$\\{app.name\\}.log
.
- Edit the
etc/org.ops4j.pax.logging
PID to add the sift appender to the root logger.JBossFuse:karaf@root>
config:edit org.ops4j.pax.logging
JBossFuse:karaf@root>
config:propset log4j.rootLogger "INFO, out, sift, osgi:VmLogAppender"
JBossFuse:karaf@root>
config:update