Set up Domoticz to syslog

From Domoticz
Jump to navigation Jump to search

Purpose

In this page, we will describe how to make Domoticz log to syslog. In this case it is set up to use rsyslog. Other syslog implementation should be very similar.

The purpose of this is to be able to send the Domoticz log to other systems for remote logging, be able to separate the Domoticz log into separate syslog facilities/logfiles and/or consolidate the logs from several Domoticz instances on a shared loghost.

Preparations

For this setup, you will need to use a version of Domoticz that supports selecting the syslog facility to be used. The help text indicating this is supported is:

$ ./domoticz -h 
2016-03-09 20:18:17.747  Domoticz V3.4933 (c)2012-2016 GizMoCuz
2016-03-09 20:18:17.894  Build Hash: e404b11, Date: 2016-03-09 17:30:00
.
. (lines deleted)
.
-syslog [user|daemon|local0 .. local7] (use syslog as log output, defaults to facility 'user')

Versions before this will log to syslog faciliity user (a.k.a. LOG_USER), which is still the default if no argument is provided

Syslog facilities are message properties that can be used in your /etc/rsyslog.conf file to determine how to further route the messages into files and/or relay messages to remote syslog servers.

Setup procedure

Change the DAEMON_ARGS

You will need to edit /etc/init.d/domoticz.sh and make the DAEMON_ARGS include at least:

 DAEMON_ARGS="-loglevel normal -syslog local1 -daemon -www .........."

Where the Domoticz log level and syslog facility is your choice.

Set up a dedicated syslog logfile for Domoticz

This an optional step, You may want to supplement the above local1 log facility with a separate syslog file. For rsyslog, that can be set up as follows in /etc/rsyslog.conf

user.info                       -/var/log/user.log
local0.info                     -/var/log/local0.log
local1.info                     -/var/log/local1.log
local2.info                     -/var/log/local2.log

If you want to send the same to a remote system, use an ip address or hostname, or more commonly a loghost alias, as follows:

user.info                       @@loghost
local0.info                     @loghost
local1.info                     @loghost
local2.info                     @192.168.5.100

The first entry will log using a TCP connection (more modern syslog implementations), the other will use UDP datagrams (legacy) for the message protocol transport

Restart services

You can now restart Domoticz and rsyslog

sudo service rsyslog restart
sudo service domoticz.sh restart

Then make sure that the logfiles update:

tail -f /var/log/local1.log

Set up log rotation

If your /var/log filesystem is small, you will want to set up log rotation as well. In Raspian and many other Linux distros, the logrotate utility runs from a daily cron job (ref /etc/cron.daily/logrotate)

A suggested setup can be set up by creating a /etc/logrotate.d/local configuration file containing the following:

/var/log/local*.log
{
       rotate 4
       weekly
       maxsize 64M
       missingok
       notifempty
       compress
       delaycompress
       sharedscripts
       postrotate
               invoke-rc.d rsyslog rotate > /dev/null
       endscript
}

Refer to man logrotate for an explanation of the semantics of this.

References

Take care if you use a SD card for the /var/log files. Logging a lot will likely make the SD card fail over time.

Consider to use tmpfs or look into Setting up overlayFS on Raspberry Pi instead