Log4j2 Sample Config

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!

My logfile show me this:

2019-03-28 09:03:46.822 [vent.ItemStateChangedEvent] - systeminfo_computer_openHABianPi_cpu_load changed from 5.5 to 5.7
2019-03-28 09:03:46.831 [vent.ItemStateChangedEvent] - Raspberry_CpuLoad changed from 5.5 to 5.7
2019-03-28 09:03:46.858 [vent.ItemStateChangedEvent] - systeminfo_computer_openHABianPi_sensors_cpuTemp changed from 60.1 to 59.6
2019-03-28 09:03:46.862 [vent.ItemStateChangedEvent] - Raspberry_SensorsCpuTemp changed from 60.1 to 59.6
2019-03-28 09:03:47.888 [vent.ItemStateChangedEvent] - systeminfo_computer_openHABianPi_cpu_load changed from 5.7 to 5.2
2019-03-28 09:03:47.892 [vent.ItemStateChangedEvent] - Raspberry_CpuLoad changed from 5.7 to 5.2
2019-03-28 09:03:47.934 [vent.ItemStateChangedEvent] - systeminfo_computer_openHABianPi_sensors_cpuTemp changed from 59.6 to 59.1
2019-03-28 09:03:47.937 [vent.ItemStateChangedEvent] - Raspberry_SensorsCpuTemp changed from 59.6 to 59.1

and ervery sceond ther is a new entry. But I don´t want them.

Have you tried this?

log:set warn smarthome.event

The source of the logs are not directly from org.openhab.binding.systeminfo. If you want to keep the state of the systeminfo_computer_openHABianPi_cpu_load Item changing every second, but don’t want the event.log logging for it, you can do what Peter suggested, or check out this post…

Gents, i dont see content for Zwave debug using this:

any thoughts?


### Custom Appenders ###
# ZWave
log4j2.logger.zwave.name = org.openhab.binding.zwave
log4j2.logger.zwave.level = TRACE
log4j2.logger.zwave.additivity = false
log4j2.logger.zwave.appenderRefs = zwave
log4j2.logger.zwave.appenderRef.zwave.ref = zwave
log4j2.appender.ZWave.name = ZWAVE
log4j2.appender.ZWave.type = RollingRandomAccessFile
log4j2.appender.ZWave.fileName = /var/log/openhab2/ZWave.log
log4j2.appender.ZWave.filePattern = /var/log/openhab2/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

Check your capitalization as compared with the one in the toubleshooting doc,

log4j2.logger.Zwave.name = org.openhab.binding.zwave
log4j2.logger.Zwave.level = DEBUG
log4j2.logger.Zwave.additivity = false
log4j2.logger.Zwave.appenderRefs = Zwave
log4j2.logger.Zwave.appenderRef.Zwave.ref = ZWAVE
1 Like

thanks mark!! I used an example from this thread, which was wrong

Thank you all my logging files are now reduced from a wild torrent into a static lake.
Even understand how to re-open the flow or add missing statement; to be honest just an ordinary TECP
Thinks this method might be even mentioned at this point of the documentation (but in this case leave this discusion to the experts).

Can now concentrate on a error which was lost in the waves:

[ERROR] [org.eclipse.lsp4j.jsonrpc.RemoteEndpoint          ] - Internal error: java.lang.IllegalArgumentException: URI has an authority component

But this is off topic so not asking to investigate this error, but sharing a know solution is off course very much welcome.

Solved: My URI ERROR was caused by settings of VSCode + Openhab extension see further post. Hope this is helpfull.

Hi all,

I’ve installed the Spotify Connect binding and it logs the song progress every second, so I would like to set the binding to WARN level.

So I updated the org.ops4j.pax.logging.cfg with these lines at the bottom:

# Custom Log Levels
log4j2.logger.org_openhab_binding_spotify.name = org.openhab.binding.spotify
log4j2.logger.org_openhab_binding_spotify.level = WARN

The binding however still logs the output every second (frontail)

Is there something I’m missing?

My Pi is running headless so I don’t think I can run Karaf to set the log levels there.

Thanks in advance

The binding isn’t logging that every second. You are looking at events.log. events.log is the EventBus’s log. It logs all events that get put on the EventBus (except for updates). The song progress Item is changing every second so that get’s logged to events.log. There is a way to filter out those lines from the events.log using openHAB - Filtering event logs. However, IMHO, you may as well just turn off events.log before neutering it by selectively filtering out events. Either it’s a log of the events or it’s not.

Once again a quality answer, thank you Rich.

openHAB - Filtering event logs looks like it will do the trick.

Is it possible to use something from the openhab.log in a rule to send me a message one this particular event occurs?
It´s a WARN message and not a item change in the events.log

kind regards
Michael

Take a look at the logreader binding.

1 Like

Thanks Mark!
I searched anywhere but not for a binding :smiley:

Hey there =)

I am having issues with setting up the configuration file so that only some bindings show their log entries. Currently my log looks something like this

2020-03-29 19:06:50.556 [vent.ItemStateChangedEvent] - NanoleafBrightness changed from 0 to 100
2020-03-29 19:06:51.391 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 23.0 to 24.0
2020-03-29 19:06:52.448 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 24.0 to 22.0
2020-03-29 19:06:53.517 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 22.0 to 23.0
2020-03-29 19:06:54.593 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 23.0 to 34.0
2020-03-29 19:06:55.649 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 34.0 to 22.0
2020-03-29 19:06:56.760 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 22.0 to 67.0
2020-03-29 19:06:57.801 [vent.ItemStateChangedEvent] - LatencyAsterix changed from 67.0 to 18.0
2020-03-29 19:06:58.808 [vent.ItemStateChangedEvent] - RasperryMemoryUsed changed from 747 to 746

In this example you can see that the network binding produces many entries. So I want to mute it. I tried to copy the configuration of the first entry but it didnt seem to work.

If i enter

log4j2.logger.smarthome_event_ItemStateChangedEvent.name = smarthome.event.ItemStateChangedEvent
log4j2.logger.smarthome_event_ItemStateChangedEvent.level = WARN

in the config file all ItemStateChangedEvents dont show up. However I didnt manage to muti only some bindings. I tried

log4j2.logger.org_openhab_binding_network.level = WARN
log4j2.logger.org_openhab_binding_network.name = org.openhab.binding.network

However this didnt change anything.

I want to mute the Spotify and the network binding. Can someone please show me how the configuration has to look like.

Thanks!

The example is showing ItemStateChangedEvent , I think these are logged by openHAB core (the event bus) not the binding, rule, or UI that caused the event.

Tinkering with binding logging therefore will not affect that.

What problems does this cause you?

Yes you’re right.
My question is if I can deactivate those ItemStateChangedEvent entries for some bindings. So for example I want to get the ItemStateChangedEvent entries from my weather binding and want to not get the ItemStateChangedEvent for the network or the spotify binding.

By now I understand why this didnt help me.

Do you understand my question and what I am trying to accomplish?

No, because they are events on the event bus, whatever source put them there. The binding is not involved in this logging.

Yes, but I’ve no idea why you want to do it. What terrible pain does it cause you?

You could maybe look at this post above for suppression by keyword, perhaps you missed it