Log4j2 Sample Config

Yes… absolutely. That’s was why I asked if you had any other loggers for the binding. Removing those should help!

1 Like

You did, But I had no idea what it did… It didnt have a path entry, so I thought it was something else…

Anyway… It seems to be working now… zigbee.log file is no longer a 0 byte, and it´s updating.
Also my tail log screen is no longer filled with debug logging from zigbee and zsmarsystems :slight_smile:

So, Once again you helped me through, Scott! :smile:

1 Like

This is old, but may help someone - I found that I could suppress a specific event.log message by adding filtering to the event appender - YMMV, but seems to work for me

Edit your org.ops4j.pax.logging.cfg file - mine is in /var/lib/openhab2/etc

# Event log appender
log4j2.appender.event.type = RollingRandomAccessFile
log4j2.appender.event.name = EVENT
log4j2.appender.event.fileName = ${openhab.logdir}/events.log
log4j2.appender.event.filePattern = ${openhab.logdir}/events.log.%i

log4j2.appender.event.filter.regex.type = RegexFilter
log4j2.appender.event.filter.regex.regex = .*Temperature changed.*
log4j2.appender.event.filter.regex.onMatch = DENY
log4j2.appender.event.filter.regex.onMisMatch = ACCEPT

log4j2.appender.event.immediateFlush = true
log4j2.appender.event.append = true
log4j2.appender.event.layout.type = PatternLayout
log4j2.appender.event.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%-26.26c] - %m%n
log4j2.appender.event.policies.type = Policies
log4j2.appender.event.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.event.policies.size.size = 16MB

Note that docs here show …regex.onMismatch - but I could only get it to work with …regex.onMisMatch (with 2 captial M’s)

Is it possible to force OH to begin writing to a new log file without stopping and starting OH?

I have set up a few custom loggers. They merily log, rotate log files, and archive. But every so often, when I am collaborating with a particular binding maintainer, I want to provide a “fresh” log file without incurring the OH restart and any potential “resetting” of the state of the binding that might accompany doing so. I want to cause the current log file to be renamed to logfile.log.n+1 and for new logging to start being written to logfile.log.

I am familiar with Karaf Console commands to manage logging (clear, tail, set, etc.). I didn’t see anything explicitly to trigger a file close and a new file creation/open.

Mike

Personally what I do is configure the binding to log to it’s own log file. If you just delete the .log file it will create a new one. Note, I don’t think you can just move it or rename it because OH will not see that and continue writing to the old file.

I’m not positive this will work but it is what I would try.

Don’t take my response as a definitive answer, but I am not aware of a way to do this. I’ve also found that deleting the current log file seems to occasionally hang the logging. I usually just manually trim up the log file to send to the dev.

You could try temporarily moving the appender to a different file, but IIRC, this also requires a restart. But there may be a way to just restart jog4j…

Yup - that’s what I’ve experienced. I hadn’t tried to outright delete the current log file. I’ll give that a shot.

I’m not developing the binding itself. I’m just helping test it. So, I’m redirecting any log output for that entity to its own log via the log4j2 configuration file… and setting a higher logging level (e.g., TRACE) as well.

Between your reply & Rich’s, it appears that it’s not possible… which is the conclusion I’d reached as well.

Help to improve the docs entry on logging please!

Existing/Current: https://www.openhab.org/docs/administration/logging.html

PR to improve it: https://github.com/openhab/openhab-docs/pull/814 (html view)

Post any recommendations either here or (preferably) in the Pull Request on github

(1,5 years later) I did it :stuck_out_tongue:

2 Likes

hi Guys

how do i remove a log thats invalid? Ive highlighted it, theres no log:delete function. Thanks!


openhab> log:list
Logger                                             │ Level
───────────────────────────────────────────────────┼──────
ROOT                                               │ WARN
javax.jmdns                                        │ ERROR
org.apache.karaf.jaas.modules.audit                │ INFO
org.apache.karaf.kar.internal.KarServiceImpl       │ ERROR
org.apache.karaf.shell.support                     │ OFF
org.apache.sshd                                    │ ERROR
org.eclipse.smarthome                              │ INFO
org.jupnp                                          │ ERROR
org.openhab                                        │ INFO
org.openhab.binding.Systeminfo                     │ ERROR
org.openhab.binding.kodi                           │ INFO
org.openhab.binding.mqtt                           │ DEBUG
org.openhab.binding.unifi                          │ INFO
org.openhab.binding.zwave                          │ TRACE
**org.openhab.binding.zwve                           │ OFF**
org.ops4j.pax.url.mvn.internal.AetherBasedResolver │ ERROR
org.ops4j.pax.web.pax-web-runtime                  │ OFF
smarthome.event                                    │ INFO
smarthome.event.InboxUpdatedEvent                  │ ERROR
smarthome.event.ItemAddedEvent                     │ ERROR
smarthome.event.ItemRemovedEvent                   │ ERROR
smarthome.event.ItemStateEvent                     │ ERROR
smarthome.event.ThingAddedEvent                    │ ERROR
smarthome.event.ThingRemovedEvent                  │ ERROR
smarthome.event.ThingStatusInfoEvent               │ INFO

If it is in the org.ops4j.pax.logging.cfg file, remove it, then restart OH. If it is not in the file, a restart should clear it out.

1 Like

Thanks Scott, found the offending logs and thats resolved it! Cheers

Following this thread, I implemented the taming of zwave log entries successfully.
After the hype of this success, I tried to tame MQTT, HUE and Astro log entries without success…
Does anybody see what´s wrong?

### Custom Loggers ###
# ZWave
log4j2.logger.ZWave.name = org.openhab.binding.zwave
log4j2.logger.ZWave.level = INFO
log4j2.logger.ZWave.additivity = false
log4j2.logger.ZWave.appenderRefs = ZWave
log4j2.logger.ZWave.appenderRef.ZWave.ref = ZWAVE

# MQTT
log4j2.logger.mqtt.name = org.openhab.binding.mqtt
log4j2.logger.mqtt.level = INFO
log4j2.logger.mqtt.additivity = false
log4j2.logger.mqtt.appenderRefs = mqtt
log4j2.logger.mqtt.appenderRef.mqtt.ref = MQTT

# HUE
log4j2.logger.hue.name = org.openhab.binding.hue
log4j2.logger.hue.level = INFO
log4j2.logger.hue.additivity = false
log4j2.logger.hue.appenderRefs = hue
log4j2.logger.hue.appenderRef.hue.ref = HUE

# Astro
log4j2.logger.astro.name = org.openhab.binding.astro
log4j2.logger.astro.level = INFO
log4j2.logger.astro.additivity = false
log4j2.logger.astro.appenderRefs = Astro
log4j2.logger.astro.appenderRef.astro.ref = ASTRO

### Custom Appenders ###
# ZWave
log4j2.appender.ZWave.name = ZWAVE
log4j2.appender.ZWave.type = RollingRandomAccessFile
log4j2.appender.ZWave.fileName = ${openhab.logdir}/ZWave.log
log4j2.appender.ZWave.filePattern = ${openhab.logdir}/ZWave.log.%i
log4j2.appender.ZWave.immediateFlush = true
log4j2.appender.ZWave.append = true
log4j2.appender.ZWave.layout.type = PatternLayout
log4j2.appender.ZWave.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-50.50c] - %m%n
log4j2.appender.ZWave.policies.type = Policies
log4j2.appender.ZWave.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.ZWave.policies.size.size = 10MB
log4j2.appender.ZWave.strategy.type = DefaultRolloverStrategy
log4j2.appender.ZWave.strategy.max = 10

# MQTT
log4j2.appender.mqtt.name = MQTT
log4j2.appender.mqtt.type = RollingRandomAccessFile
log4j2.appender.mqtt.fileName = ${openhab.logdir}/MQTT.log
log4j2.appender.mqtt.filePattern = ${openhab.logdir}/MQTT.log.%i
log4j2.appender.mqtt.immediateFlush = true
log4j2.appender.mqtt.append = true
log4j2.appender.mqtt.layout.type = PatternLayout
log4j2.appender.mqtt.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-50.50c] - %m%n
log4j2.appender.mqtt.policies.type = Policies
log4j2.appender.mqtt.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.mqtt.policies.size.size = 10MB
log4j2.appender.mqtt.strategy.type = DefaultRolloverStrategy
log4j2.appender.mqtt.strategy.max = 10

# HUE
log4j2.appender.hue.name = HUE
log4j2.appender.hue.type = RollingRandomAccessFile
log4j2.appender.hue.fileName = ${openhab.logdir}/hue.log
log4j2.appender.hue.filePattern = ${openhab.logdir}/hue.log.%i
log4j2.appender.hue.immediateFlush = true
log4j2.appender.hue.append = true
log4j2.appender.hue.layout.type = PatternLayout
log4j2.appender.hue.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-50.50c] - %m%n
log4j2.appender.hue.policies.type = Policies
log4j2.appender.hue.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.hue.policies.size.size = 10MB
log4j2.appender.hue.strategy.type = DefaultRolloverStrategy
log4j2.appender.hue.strategy.max = 10

# Astro
log4j2.appender.astro.name = ASTRO
log4j2.appender.astro.type = RollingRandomAccessFile
log4j2.appender.astro.fileName = ${openhab.logdir}/Astro.log
log4j2.appender.astro.filePattern = ${openhab.logdir}/Astro.log.%i
log4j2.appender.astro.immediateFlush = true
log4j2.appender.astro.append = true
log4j2.appender.astro.layout.type = PatternLayout
log4j2.appender.astro.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-50.50c] - %m%n
log4j2.appender.astro.policies.type = Policies
log4j2.appender.astro.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.astro.policies.size.size = 10MB
log4j2.appender.astro.strategy.type = DefaultRolloverStrategy
log4j2.appender.astro.strategy.max = 10

Log files are created but empty and the entries still in event.log.

Thanks!

Only had a quick look, but your ‘Astro’ here should be ‘astro’.

Hi,

I have a problem with my logging. My systeminfo binding is updating its values ervery second. Thats fine, but my logfile is very trashed and i cant see if something goes wrong.

I tried log:set WARN org.openhab.binding.systeminfo
but it didn´t helped.
Also I can´t edit the etc/org.ops4j.pax.logging.cfg with an editor.

can someone help me?

Please post a sample of the logging you’re getting, that you’d like to filter out or reduce the level for. Also, what do you see with log:get?

Please be more specifc. This is a text file, and it could potentially get corrupt. Are you on a Pi with an SD card? You also may not be using an acount with permissions to access the file.

Hello,
I want to write all ZWave messages in a single logfile. I changed the file /var/lib/openhab2/etc/org.ops4j.pax.logging.cfg as described above. The problem is that although an empty ZWave.log file is created, all messages are still written in openhab.log. Can someone find a mistake in my cfg?

# Common pattern layout for appenders
#log4j2.pattern = %d{ISO8601} | %-5p | %-16t | %-32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n

# Root logger
log4j2.rootLogger.level = WARN
log4j2.rootLogger.appenderRefs = out, osgi
log4j2.rootLogger.appenderRef.out.ref = LOGFILE
log4j2.rootLogger.appenderRef.osgi.ref = OSGI

# Karaf Shell logger
log4j2.logger.shell.name = org.apache.karaf.shell.support
log4j2.logger.shell.level = OFF
log4j2.logger.shell.appenderRefs = stdout
log4j2.logger.shell.appenderRef.stdout.ref = STDOUT

# Security audit logger
log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit
log4j2.logger.audit.level = INFO
log4j2.logger.audit.additivity = false
log4j2.logger.audit.appenderRefs = audit
log4j2.logger.audit.appenderRef.audit.ref = AUDIT

# openHAB specific logger configuration

log4j2.logger.openhab.name = org.openhab
log4j2.logger.openhab.level = INFO

log4j2.logger.smarthome.name = org.eclipse.smarthome
log4j2.logger.smarthome.level = INFO

log4j2.logger.smarthomeItemStateEvent.name = smarthome.event.ItemStateEvent
log4j2.logger.smarthomeItemStateEvent.level = ERROR
log4j2.logger.smarthomeItemAddedEvent.name = smarthome.event.ItemAddedEvent
log4j2.logger.smarthomeItemAddedEvent.level = ERROR
log4j2.logger.smarthomeItemRemovedEvent.name = smarthome.event.ItemRemovedEvent
log4j2.logger.smarthomeItemRemovedEvent.level = ERROR
log4j2.logger.smarthomeThingStatusInfoEvent.name = smarthome.event.ThingStatusInfoEvent
log4j2.logger.smarthomeThingStatusInfoEvent.level = ERROR
log4j2.logger.smarthomeThingAddedEvent.name = smarthome.event.ThingAddedEvent
log4j2.logger.smarthomeThingAddedEvent.level = ERROR
log4j2.logger.smarthomeThingRemovedEvent.name = smarthome.event.ThingRemovedEvent
log4j2.logger.smarthomeThingRemovedEvent.level = ERROR
log4j2.logger.smarthomeInboxUpdatedEvent.name = smarthome.event.InboxUpdatedEvent
log4j2.logger.smarthomeInboxUpdatedEvent.level = ERROR

log4j2.logger.events.name = smarthome.event
log4j2.logger.events.level = INFO
log4j2.logger.events.additivity = false
log4j2.logger.events.appenderRefs = event
log4j2.logger.events.appenderRef.event.ref = EVENT
log4j2.logger.events.appenderRef.osgi.ref = OSGI

log4j2.logger.jupnp.name = org.jupnp
log4j2.logger.jupnp.level = ERROR

log4j2.logger.jmdns.name = javax.jmdns
log4j2.logger.jmdns.level = ERROR

# This suppresses all Maven download issues from the log when doing feature installations
# as we are logging errors ourselves in a nicer way anyhow.
log4j2.logger.paxurl.name = org.ops4j.pax.url.mvn.internal.AetherBasedResolver
log4j2.logger.paxurl.level = ERROR

# Filters known issues of pax-web (issue link to be added here).
# Can be removed once the issues are resolved in an upcoming version.
log4j2.logger.paxweb.name = org.ops4j.pax.web.pax-web-runtime
log4j2.logger.paxweb.level = OFF

# Filters known issues of lsp4j, see
# https://github.com/eclipse/smarthome/issues/4639
# https://github.com/eclipse/smarthome/issues/4629
# https://github.com/eclipse/smarthome/issues/4643
# Can be removed once the issues are resolved in an upcoming version.
log4j2.logger.lsp4j.name = org.eclipse.lsp4j
log4j2.logger.lsp4j.level = OFF

# Filters known issues of KarServiceImpl, see
# https://github.com/openhab/openhab-distro/issues/519#issuecomment-351944506
# Can be removed once the issues are resolved in an upcoming version.
log4j2.logger.karservice.name = org.apache.karaf.kar.internal.KarServiceImpl
log4j2.logger.karservice.level = ERROR

# Filters warnings about small thread pools.
# The thread pool is kept small intentionally for supporting resource constrained hardware.
log4j2.logger.threadpoolbudget.name = org.eclipse.jetty.util.thread.ThreadPoolBudget
log4j2.logger.threadpoolbudget.level = ERROR

### Custom Loggers ###
# ZWave
log4j2.logger.ZWave.name = org.openhab.binding.zwave
log4j2.logger.ZWave.level = INFO
log4j2.logger.ZWave.additivity = false
log4j2.logger.ZWave.appenderRefs = ZWave
log4j2.logger.ZWave.appenderRef.ZWave.ref = ZWAVE

# Appenders configuration

### Custom Appenders ###
# ZWave
log4j2.appender.ZWave.name = ZWAVE
log4j2.appender.ZWave.type = RollingRandomAccessFile
log4j2.appender.ZWave.fileName = ${openhab.logdir}/ZWave.log
log4j2.appender.ZWave.filePattern = ${openhab.logdir}/ZWave.log.%i
log4j2.appender.ZWave.immediateFlush = true
log4j2.appender.ZWave.append = true
log4j2.appender.ZWave.layout.type = PatternLayout
log4j2.appender.ZWave.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-50.50c] - %m%n
log4j2.appender.ZWave.policies.type = Policies
log4j2.appender.ZWave.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.ZWave.policies.size.size = 10MB
log4j2.appender.ZWave.strategy.type = DefaultRolloverStrategy
log4j2.appender.ZWave.strategy.max = 10

# Console appender not used by default (see log4j2.rootLogger.appenderRefs)
log4j2.appender.console.type = Console
log4j2.appender.console.name = STDOUT
log4j2.appender.console.layout.type = PatternLayout
log4j2.appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%-5.5p] [%-36.36c] - %m%n

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

# Event log appender
log4j2.appender.event.type = RollingRandomAccessFile
log4j2.appender.event.name = EVENT
log4j2.appender.event.fileName = ${openhab.logdir}/events.log
log4j2.appender.event.filePattern = ${openhab.logdir}/events.log.%i
log4j2.appender.event.immediateFlush = true
log4j2.appender.event.append = true
log4j2.appender.event.layout.type = PatternLayout
log4j2.appender.event.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%-50.50c] - %m%n
log4j2.appender.event.policies.type = Policies
log4j2.appender.event.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.event.policies.size.size = 16MB

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

# OSGi appender
log4j2.appender.osgi.type = PaxOsgi
log4j2.appender.osgi.name = OSGI
log4j2.appender.osgi.filter = *
log4j2.logger.org_openhab_binding_zwave.name = org.openhab.binding.zwave
log4j2.logger.org_eclipse_smarthome_automation.level = INFO
log4j2.logger.org_eclipse_smarthome_automation.name = org.eclipse.smarthome.automation

  • Platform information:
    • Hardware: raspberry pi 3 b
    • OS: Raspbian GNU/Linux 9 (stretch)
    • Java Runtime Environment: Java™ SE Runtime Environment (build 1.8.0_181-b13)
    • openHAB version: 2.4.0 (Build) stable

I use this ZWave binding:

openhab> bundle:list -s | grep zwave
290 x Active   x  80 x 2.5.0.201903031122     x org.openhab.binding.zwave
openhab>

Way down at the bottom of the file, you have a second zwave logger. Remove that one.

oh :blush:, I missed that, thank you!