so, nachdem mich das Thema mit dem logging in openHAB schon einige Zeit beschäftigt, ich aber bisher zu faul war es umzusetzen, habe ich mich jetzt mal drangesetzt.
Mit einer der Gründe, warum ich mich mal dem Thema angenommen, ist folgender:
Code: Alles auswählen
var boolean log = true
if (log) logInfo(filename, logPrefix + "Rollladen werden geoeffnet")
An dieser Stelle nochmal Danke an udo1toni, der nicht müde geworden ist, zurecht diese „nicht saubere“ Programmierung, mit sehr guten Beispielen zu kommentieren.
Ich habe zum einen die config des log4j2 angepasst und zum anderen die Frontail config (Text highlighting im Log). Die entsprechenden config files findet ihr im file system unter:
Code: Alles auswählen
/var/lib/openhab2/etc/org.ops4j.pax.logging.cfg (log4j2)
/etc/systemd/system/ frontail.service (frontail)
/usr/lib/node_modules/frontail/preset/openhab.json (frontail)
Dieser mächtige Logger bietet unter anderem die Option, beliebig viele Logger anzulegen, auf die entsprechenden Bedürfnisse zu konfigurieren und zur Laufzeit zu steuern, was geloggt wird.
Die Original org.ops4j.pax.logging.cfg (openHAB 2.5) sieht so aus:
Default
Code: Alles auswählen
# 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
log4j2.logger.paperui.name = org.openhab.ui.paper
log4j2.logger.paperui.level = WARN
log4j2.logger.paperuiint.name = org.openhab.ui.paper.internal
log4j2.logger.paperuiint.level = INFO
# 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 unavailable ciphers when JCE is not installed, see
# https://github.com/openhab/openhab-distro/issues/999
log4j2.logger.sshutils.name = org.apache.karaf.shell.ssh.SshUtils
log4j2.logger.sshutils.level = ERROR
# Filters known issues of javax.mail, see
# https://github.com/openhab/openhab2-addons/issues/5530
log4j2.logger.javaxmail.name = javax.mail
log4j2.logger.javaxmail.level = ERROR
# Appenders configuration
# 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] [%-36.36c] - %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} [%-26.26c] - %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] [%-36.36c] - %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 = *
Hier nun meine angepasste org.ops4j.pax.logging.cfg.
Damit es etwas übersichtlicher wird, habe ich den angepassten Teilen immer
Code: Alles auswählen
# ----------------------Custom……..
Code: Alles auswählen
# 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
# ----------------------Custom Log Levels (Events & Bindings)----------------------
# Custom Log Levels (Events)
log4j2.logger.smarthomeChannelTriggeredEvent.name = smarthome.event.ChannelTriggeredEvent
log4j2.logger.smarthomeChannelTriggeredEvent.level = INFO
log4j2.logger.smarthomeConfigStatusInfoEvent.name = smarthome.event.ConfigStatusInfoEvent
log4j2.logger.smarthomeConfigStatusInfoEvent.level = WARN
log4j2.logger.smarthomeExtensionEvent.name = smarthome.event.ExtensionEvent
log4j2.logger.smarthomeExtensionEvent.level = WARN
log4j2.logger.smarthomeGroupItemStateChangedEvent.name = smarthome.event.GroupItemStateChangedEvent
log4j2.logger.smarthomeGroupItemStateChangedEvent.level = WARN
log4j2.logger.smarthomeInboxAddedEvent.name = smarthome.event.InboxAddedEvent
log4j2.logger.smarthomeInboxAddedEvent.level = WARN
log4j2.logger.smarthomeInboxRemovedEvent.name = smarthome.event.InboxRemovedEvent
log4j2.logger.smarthomeInboxRemovedEvent.level = WARN
log4j2.logger.smarthomeItemChannelLinkAddedEvent.name = smarthome.event.ItemChannelLinkAddedEvent
log4j2.logger.smarthomeItemChannelLinkAddedEvent.level = WARN
log4j2.logger.smarthomeItemChannelLinkRemovedEvent.name = smarthome.event.ItemChannelLinkRemovedEvent
log4j2.logger.smarthomeItemChannelLinkRemovedEvent.level = WARN
log4j2.logger.smarthomeItemCommandEvent.name = smarthome.event.ItemCommandEvent
log4j2.logger.smarthomeItemCommandEvent.level = INFO
log4j2.logger.smarthomeItemStatePredictedEvent.name = smarthome.event.ItemStatePredictedEvent
log4j2.logger.smarthomeItemStatePredictedEvent.level = INFO
log4j2.logger.smarthomeItemStateChangedEvent.name = smarthome.event.ItemStateChangedEvent
log4j2.logger.smarthomeItemStateChangedEvent.level = WARN
log4j2.logger.smarthomeThingStatusInfoChangedEvent.name = smarthome.event.ThingStatusInfoChangedEvent
log4j2.logger.smarthomeThingStatusInfoChangedEvent.level = INFO
log4j2.logger.smarthomeThingUpdatedEvent.name = smarthome.event.ThingUpdatedEvent
log4j2.logger.smarthomeThingUpdatedEvent.level = WARN
# An I/O error has occurred while writing a response message entity to the container output stream, see
# https://github.com/openhab/openhab-distro/issues/587
log4j2.logger.ioError1.name = org.glassfish.jersey.server.ServerRuntime$Responder
log4j2.logger.ioError1.level = OFF
log4j2.logger.ioError2.name = org.glassfish.jersey.server.internal.process.MappableException
log4j2.logger.ioError2.level = OFF
log4j2.logger.ioError3.name = org.eclipse.jetty.io.EofException
log4j2.logger.ioError3.level = OFF
# Custom Log Levels (Bindings)
log4j2.logger.org_openhab_binding_mqtt.name = org.openhab.binding.mqtt
log4j2.logger.org_openhab_binding_mqtt.level = WARN
log4j2.logger.org_openhab_binding_ntp.name = org.openhab.binding.ntp
log4j2.logger.org_openhab_binding_ntp.level = WARN
log4j2.logger.org_openhab_binding_unifi.name = org.openhab.binding.unifi
log4j2.logger.org_openhab_binding_unifi.level = WARN
log4j2.logger.org_openhab_binding_weather.name = org.openhab.binding.weather
log4j2.logger.org_openhab_binding_weather.level = WARN
log4j2.logger.org_openhab_persistence_influxdb.name = org.openhab.persistence.influxdb
log4j2.logger.org_openhab_persistence_influxdb.level = WARN
log4j2.logger.org_openhab_binding_samsungtv.name = org.openhab.binding.samsungtv
log4j2.logger.org_openhab_binding_samsungtv.level = WARN
log4j2.logger.org_openhab_io_homekit.name = org.openhab.io.homekit
log4j2.logger.org_openhab_io_homekit.level = WARN
log4j2.logger.org_openhab_io_transport_mqtt.name = org.openhab.io.transport.mqtt
log4j2.logger.org_openhab_io_transport_mqtt.level = WARN
log4j2.logger.org_openhab_ui_paperui.name = org.openhab.ui.paperui
log4j2.logger.org_openhab_ui_paperui.level = WARN
log4j2.logger.org_openhab_ui_basicui.name = org.openhab.ui.basicui
log4j2.logger.org_openhab_ui_basicui.level = WARN
log4j2.logger.smarthome_ui_paper.name = smarthome.ui.paper
log4j2.logger.smarthome_ui_paper.level = WARN
log4j2.logger.smarthome_ui_basic.name = smarthome.ui.basic
log4j2.logger.smarthome_ui_basic.level = WARN
log4j2.logger.smarthome_transform_jsonpath.name = smarthome.transform.jsonpath
log4j2.logger.smarthome_transform_jsonpath.level = WARN
log4j2.logger.smarthome_transform_map.name = smarthome.transform.map
log4j2.logger.smarthome_transform_map.level = WARN
log4j2.logger.smarthome_transform_regex.name = smarthome.transform.regex
log4j2.logger.smarthome_transform_regex.level = WARN
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
log4j2.logger.paperui.name = org.openhab.ui.paper
log4j2.logger.paperui.level = WARN
log4j2.logger.paperuiint.name = org.openhab.ui.paper.internal
log4j2.logger.paperuiint.level = INFO
# 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 unavailable ciphers when JCE is not installed, see
# https://github.com/openhab/openhab-distro/issues/999
log4j2.logger.sshutils.name = org.apache.karaf.shell.ssh.SshUtils
log4j2.logger.sshutils.level = ERROR
# Filters known issues of javax.mail, see
# https://github.com/openhab/openhab2-addons/issues/5530
log4j2.logger.javaxmail.name = javax.mail
log4j2.logger.javaxmail.level = ERROR
# Appenders configuration
# 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] [%-40.40c] - %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] [%-40.40c] - %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} [%-40.40c] - %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] [%-40.40c] - %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 = *
# ----------------------Custom Loggers (Rules)----------------------
# Default Rules files logger
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.debugRules.name = org.eclipse.smarthome.model.script.rules.debug
#log4j2.logger.debugRules.level = DEBUG
#log4j2.logger.traceRules.name = org.eclipse.smarthome.model.script.rules.trace
#log4j2.logger.traceRules.level = TRACE
#log4j2.logger.timersRules.name = org.eclipse.smarthome.model.script.rules.timers
#log4j2.logger.timersRules.level = DEBUG
# iCloud Logger (Rules)
#log4j2.logger.iCloudRules.name = org.eclipse.smarthome.model.script.icloud
#log4j2.logger.iCloudRules.level = INFO
#log4j2.logger.iCloudRules.additivity = false
#log4j2.logger.iCloudRules.appenderRefs = iCloud
#log4j2.logger.iCloudRules.appenderRef.iCloud.ref = ICLOUD
# Sonos Logger (Rules)
#log4j2.logger.sonosRules.name = org.eclipse.smarthome.model.script.sonos
#log4j2.logger.sonosRules.level = INFO
#log4j2.logger.sonosRules.additivity = false
#log4j2.logger.sonosRules.appenderRefs = Sonos
#log4j2.logger.sonosRules.appenderRef.Sonos.ref = SONOS
# Astro Logger (Rules)
#log4j2.logger.astroRules.name = org.eclipse.smarthome.model.script.sstro
#log4j2.logger.astroRules.level = INFO
#log4j2.logger.astroRules.additivity = false
#log4j2.logger.astroRules.appenderRefs = Astro
#log4j2.logger.astroRules.appenderRef.Astro.ref = ASTRO
# ----------------------Custom Loggers (Bindings)----------------------
# Custom Loggers for individual bindings
# # Sonos Logger (Binding)
# log4j2.logger.sonosBinding.name = org.eclipse.smarthome.binding.sonos
# log4j2.logger.sonosBinding.level = INFO
# log4j2.logger.sonosBinding.additivity = false
# log4j2.logger.sonosBinding.appenderRefs = Sonos
# log4j2.logger.sonosBinding.appenderRef.Sonos.ref = SONOS
# # Astro Logger (Binding)
# log4j2.logger.astroBinding.name = org.openhab.binding.astro
# log4j2.logger.astroBinding.level = INFO
# log4j2.logger.astroBinding.additivity = false
# log4j2.logger.astroBinding.appenderRefs = Astro
# log4j2.logger.astroBinding.appenderRef.Astro.ref = ASTRO
# # iCloud Logger (Binding)
# log4j2.logger.iCloudBinding.name = org.openhab.binding.icloud
# log4j2.logger.iCloudBinding.level = INFO
# log4j2.logger.iCloudBinding.additivity = false
# log4j2.logger.iCloudBinding.appenderRefs = iCloud
# log4j2.logger.iCloudBinding.appenderRef.iCloud.ref = ICLOUD
# ----------------------Custom Appenders Configuration----------------------
# Custom Appenders
# Rules file appender
log4j2.appender.Sonos.name = RULES
log4j2.appender.Sonos.type = RollingRandomAccessFile
log4j2.appender.Sonos.fileName = ${openhab.logdir}/rules.log
log4j2.appender.Sonos.filePattern = ${openhab.logdir}/rules.log.%i
log4j2.appender.Sonos.immediateFlush = true
log4j2.appender.Sonos.append = true
log4j2.appender.Sonos.layout.type = PatternLayout
log4j2.appender.Sonos.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-40.40c] - %m%n
log4j2.appender.Sonos.policies.type = Policies
log4j2.appender.Sonos.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.Sonos.policies.size.size = 10MB
log4j2.appender.Sonos.strategy.type = DefaultRolloverStrategy
log4j2.appender.Sonos.strategy.max = 10
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] [%-40.40c] - %m%n
log4j2.appender.audit.policies.type = Policies
log4j2.appender.audit.policies.size.type = SizeBasedTriggeringPolicy
log4j2.appender.audit.policies.size.size = 8MB
# # Sonos File appender - Sonos.log
# log4j2.appender.Sonos.name = SONOS
# log4j2.appender.Sonos.type = RollingRandomAccessFile
# log4j2.appender.Sonos.fileName = ${openhab.logdir}/sonos.log
# log4j2.appender.Sonos.filePattern = ${openhab.logdir}/sonos.log.%i
# log4j2.appender.Sonos.immediateFlush = true
# log4j2.appender.Sonos.append = true
# log4j2.appender.Sonos.layout.type = PatternLayout
# log4j2.appender.Sonos.layout.pattern = %d{dd-MMM-yyyy HH:mm:ss.SSS} [%-5.5p] [%-40.40c] - %m%n
# log4j2.appender.Sonos.policies.type = Policies
# log4j2.appender.Sonos.policies.size.type = SizeBasedTriggeringPolicy
# log4j2.appender.Sonos.policies.size.size = 10MB
# log4j2.appender.Sonos.strategy.type = DefaultRolloverStrategy
# log4j2.appender.Sonos.strategy.max = 10
# # Astro File Appender - Astro.log
# 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{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-40.40c] - %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
# # iCloud File Appender - iCloud.log
# log4j2.appender.iCloud.name = ICLOUD
# log4j2.appender.iCloud.type = RollingRandomAccessFile
# log4j2.appender.iCloud.fileName = ${openhab.logdir}/iCloud.log
# log4j2.appender.iCloud.filePattern = ${openhab.logdir}/iCloud.log.%i
# log4j2.appender.iCloud.immediateFlush = true
# log4j2.appender.iCloud.append = true
# log4j2.appender.iCloud.layout.type = PatternLayout
# log4j2.appender.iCloud.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-40.40c] - %m%n
# log4j2.appender.iCloud.policies.type = Policies
# log4j2.appender.iCloud.policies.size.type = SizeBasedTriggeringPolicy
# log4j2.appender.iCloud.policies.size.size = 10MB
# log4j2.appender.iCloud.strategy.type = DefaultRolloverStrategy
# log4j2.appender.iCloud.strategy.max = 10
An die KARAF Console kommt ihr über den Befehl
Code: Alles auswählen
ssh -p 8101 openhab@localhost
Code: Alles auswählen
log:list
Damit unsere logeinträge auch richtig zugewiesen werden, müssen wir jetzt noch die rules anpassen.
Code: Alles auswählen
logInfo("rules", logPrefix + "Aktuelle Bewoelkung ({}) ueberschreitet den eingestellten Grenzwert von ({})", OW_localCurrentCloudiness.state, AutoShading_Cloudiness_max.state)
Code: Alles auswählen
logInfo("rules".....
Nachdem unser Logger nun sauber in die logfiles event.log, rules.log und openhab.log schreibt, widme ich mich nun frontail.
Der Frontail Service:
Bei frontail müssen wir nun zwei config files anpassen. Zum einen die frontail.service, in der wir das neue logfile rules.log eintragen und zum anderen die openhab.json, in der wir das Text highlighting umsetzen.
Die angepasste frontail.service sieht dann so aus:
Code: Alles auswählen
[Unit]
Description=Frontail openHAB instance, reachable at http://%H:9001
Documentation=https://github.com/mthenw/frontail
Documentation=https://github.com/openhab/openhabian/issues/28
After=openhab2.service
[Service]
Type=simple
ExecStart=/usr/lib/node_modules/frontail/bin/frontail --ui-highlight --ui-highlight-preset /usr/lib/node_modules/frontail/preset/openhab.json -t openhab -l 2000 -n 400 /var/log/openhab2/openhab.log /var/log/openhab2/events.log /var/log/openhab2/rules.log
Restart=always
User=openhab
Group=openhab
Environment=PATH=/usr/bin/
Environment=NODE_ENV=production
WorkingDirectory=/usr/bin/
[Install]
WantedBy=multi-user.target
Hier mal meine angepasste openhab.json:
Code: Alles auswählen
{
"words": {
"[ERROR]": "color: red;",
"[WARN ]": "color: orange;",
"[INFO ]": "color: green;",
"Node is DEAD": "color: red;",
"[GroupItemStateChangedEvent]": "color: #0026FF;",
"[ItemStateChangedEvent ]": "color: #0026FF;",
"[ItemCommandEvent ]": "color: #0026FF; font-weight: bold;",
"[hingStatusInfoChangedEvent]": "color: #007F46;",
"received command ON": "color: black;",
"received command OFF": "color: black;",
"received command": "color: black;"
},
"lines": {
"/var/log/openhab2/openhab.log": "text-align: left; font-size: 0.8em; border-top: 2px solid #F8F8F8;",
"/var/log/openhab2/events.log": "text-align: left; font-size: 0.8em; border-top: 2px solid #F8F8F8;",
"/var/log/openhab2/rules.log": "text-align: left; font-size: 0.8em; border-top: 2px solid #F8F8F8;",
"ERROR": "background-color: #F3BFBF;",
"model.script": "background-color: #A6CFFD; font-weight: bold;",
"ItemCommandEvent": "background-color: #10E710; font-weight: bold;"
}
}
CYA
Cyrelian