[riot-devel] Lightweight Syslog Implementation
Juan Ignacio Carrano
j.carrano at fu-berlin.de
Wed May 29 11:57:55 CEST 2019
On 28/5/19 18:53, Robin wrote:
> Only problem here is that syslog as implemented in gLibc
> expects a user to issue a call to openlog first. Maybe I can make the
> call to openlog implicit and thus make it compatible to both API‘s.
The standard works in our favor here:
"The use of openlog() is optional" and " The use of closelog() is
optional". We can have no-ops for both functions:
#define openlog(ident, option, facility) (void)((ident), (option),
> Another solution could be to extend the log module with a bootstrap/init
> function which defaults to do nothing in most cases.
Should not be needed if we do what unix syslog does, initialize it on
the first call to syslog() if necessary.
> One problem with the generic LOG approach that comes to my mind is that
> it looks like a all or nothing approach.
I suggest the choice should not be between serial backend and syslog
backend, but rather between serial backend (used for most simple
applications) and IPC/message queue backend. At the end of the quie is
the logic deciding how the packet should be sent.
An advantage of this approach is that is is also useful for serial-only
loggers where one wants to ensure strings don't intermingle. Also the
current implementation of uart logging inherits the blocking
characteristics of the UART, meanings that logging blocks until the
message has been sent.
Of course, most applications are fine with just writing directly to UART
backend and having the queue by default would be overkill.
> When I implement the syslog
> implementation as a log module it wouldn’t be possible anymore for the
> user to decide which logs should be shipped via syslog and which logs
> only should be send over serial line.
With a queue, the decision can be made according to the PID of the
message sender. Or, even better, according to the facility value set by
that thread in openlog().
BTW, there is an option in UNIX called LOG_CONS:
> LOG_CONS Write directly to the system console if there is an
error while sending to the system logger.
The more we discuss this topic, the more I'm convinced we cannot
overlook it if we want RIOT to be practical for large-scale deployments.
More information about the devel