Log4j2 Sample Config

Here’s an example that I implemented today.
Objectives:
-Specify a default log level for all rules.
-(Temporarily) overrule the log level for individual log files.
-Use a dedicated log file for any logging created by my rules.

I have edited the /var/lib/openhab2/etc/org.ops4j.pax.logging.cfg file and added the following three sections:

# Rules files logger (default)
log4j2.logger.rules.name = org.eclipse.smarthome.model.script.rules
log4j2.logger.rules.level = INFO
log4j2.logger.rules.additivity = false
log4j2.logger.rules.appenderRefs = rules
log4j2.logger.rules.appenderRef.stdout.ref = RULES

# Log level for individual rules files
#log4j2.logger.rulesExperiment.name = org.eclipse.smarthome.model.script.rules.experiment
#log4j2.logger.rulesExperiment.level = DEBUG
#log4j2.logger.rulesNetwork.name = org.eclipse.smarthome.model.script.rules.network
#log4j2.logger.rulesNetwork.level = DEBUG
#log4j2.logger.rulesPresence.name = org.eclipse.smarthome.model.script.rules.presence
#log4j2.logger.rulesPresence.level = DEBUG
#log4j2.logger.rulesRfxtrx.name = org.eclipse.smarthome.model.script.rules.rfxtrx
#log4j2.logger.rulesRfxtrx.level = DEBUG
#log4j2.logger.rulesSun.name = org.eclipse.smarthome.model.script.rules.sun
#log4j2.logger.rulesSun.level = DEBUG
#log4j2.logger.rulesTimers.name = org.eclipse.smarthome.model.script.rules.timers
#log4j2.logger.rulesTimers.level = DEBUG

# Rules file appender
log4j2.appender.rules.type = RollingRandomAccessFile
log4j2.appender.rules.name = RULES
log4j2.appender.rules.fileName = ${openhab.logdir}/rules.log
log4j2.appender.rules.filePattern = ${openhab.logdir}/rules.log.%i
log4j2.appender.rules.immediateFlush = true
log4j2.appender.rules.append = true
log4j2.appender.rules.layout.type = PatternLayout
log4j2.appender.rules.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-36.36c] - %m%n
log4j2.appender.rules.policies.type = Policies
log4j2.appender.rules.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.rules.policies.size.size = 8MB

I hope this can help anyone who is struggling with the new log4j2 configuration.

edit
In the rules files I call the log methods as follows:

logDebug("rules.experiment","blah blah");
logInfo("rules.timers","blah blah");
logError("rules.network","blah blah");

Cheers,
Robert.

2 Likes