It appears that a whole protocol description exists for syslog messages and
the implementation of syslog "originators", "relays" and "collectors". It's RFC
<https://www.rfc-editor.org/rfc/rfc5424#section-6>5424
<https://www.rfc-editor.org/rfc/rfc5424#section-6>. I read through it today
to see how involved it would be to set up.

It appears that most of the information the RFC asks to be included are
things that NuttX already includes in its syslog messages (i.e. we have all
the LOG levels (debug, info, emerg, etc) and all the facilities (auth,
kernel, etc. left blank as 0), there is timestamping, PID inclusion, etc.).
The RFC also includes a structured data section so for NuttX devices that
have a system clock that is not synchronized, you can indicate that. The
RFC also allows many of these fields to be marked NIL, which works well
with NuttX's very configurable syslog options (so users can exclude PID for
instance, and the field can be marked NIL).

What I'm now struggling with is setting up these structured messages with
the way syslog is implemented. Right now I am able to read the RAMLOG
output from the syslog character device just fine, and send the text as UDP
packets (very simply). I want to get at the information included in the
syslog calls to construct one of these messages from the RFC, but the only
way I can think to do that would be to actually parse the text in the
syslog output to re-extract the information (i.e. if the message says
[INFO], it is of severity LOG_INFO, etc.). There are two problems with this
approach:

1) Slow and tedious, especially on embedded systems with already limited
resources if they are generating many logs
2) Some information is excluded from the log text. Ex: the user can choose
to hide the severity. The `syslog` call may be aware it was called with
LOG_INFO, but the generated text gives no indication what the severity was,
so it cannot be parsed and included in the syslog packet

Any ideas on what might be the best way to go about implementing this RFC?
I was thinking there could also be another syslog sink which logs some kind
of structured binary data including the severity, timestamp, message, etc.
but not sure that would work overly well since the lower-half syslog
drivers aren't given anything besides characters
<https://nuttx.apache.org/docs/latest/components/drivers/special/syslog.html#syslog-channels>
(from what I can tell anyways).

Best,
Matteo

On Wed, Jun 4, 2025 at 9:58 PM Gregory Nutt <spudan...@gmail.com> wrote:

>
>
> ⁣Get BlueMail for Android ​
>
> On Jun 4, 2025, 12:29 PM, at 12:29 PM, Matteo Golin <
> matteo.go...@gmail.com> wrote:
> >I like the idea of doing a syslogd implementation, since I agree that
> >it
> >would probably be simpler to implement in userspace. Looking even at
> >the
> >ramlog implementation, I'm not sure how using networking operations for
> >something like a low-level `putc` would be achieved easily. I might
> >read
> >into netconsole a bit further just to get an idea though.
> >
> >Thank you for the pointers everyone!
> >Matteo
> >
> >On Tue, Jun 3, 2025 at 9:46 PM Xiang Xiao <xiaoxiang781...@gmail.com>
> >wrote:
> >
> >> Two approach could achieve the goal:
> >>
> >>    1. Utilize ramlog and implement all network stuff in userspace,
> >like
> >>    syslogd(https://linux.die.net/man/8/syslogd). You can even
> >implement
> >> the
> >>    same protocol as syslogd, so PC tools can be reused directly.
> >>    2. Do all network stuff inside the kernel directly like Linux
> >> netconsole(
> >>    https://docs.kernel.org/networking/netconsole.html)
> >>
> >> The first approach is simple, but consumes more memory and can't send
> >out
> >> the final panic log. On the other hand, the second needs to improve
> >the
> >> netdev driver model and NIC driver adaptation, but fix all
> >shortcomings in
> >> the first one.
> >>
> >> On Wed, Jun 4, 2025 at 5:01 AM Matteo Golin <matteo.go...@gmail.com>
> >> wrote:
> >>
> >> > Hello everyone,
> >> >
> >> > I was taking a look at the different syslog output options, and I
> >noticed
> >> > that there are a variety of different sinks
> >> > (character devices, CDCACM, RAM, etc). However, I was thinking that
> >it
> >> > would be useful to have a network sink for
> >> > syslog, so that logs could be sent over a network interface and
> >collected
> >> > elsewhere. This might be useful for systems
> >> > that have small amounts of physical storage but are network
> >connected, or
> >> > have a very long up-time.
> >> >
> >> > What do you think about an implementation of syslog for network
> >capable
> >> > devices that achieves this? Are there any big
> >> > hurdles I might not be considering (like setting up a connection,
> >using
> >> > UDP/TCP, etc)? There would probably have to be a
> >> > decently large buffer to avoid slowing down code with blocking send
> >> calls.
> >> >
> >> > What do you think?
> >> >
> >> > --
> >> > Matteo Golin
> >> >
> >>
>

Reply via email to