[systemd-devel] [PATCH] journal: handle multiline syslog messages
Harald Hoyer
harald at redhat.com
Tue Aug 6 02:32:46 PDT 2013
On 08/05/2013 02:12 PM, Lennart Poettering wrote:
> On Thu, 01.08.13 12:22, harald at redhat.com (harald at redhat.com) wrote:
>
>> From: Harald Hoyer <harald at redhat.com>
>>
>> Since the journal can handle multiple lines just well natively,
>> and rsyslog can be configured to handle them as well, there is no need
>> to truncate messages from syslog() after the first newline.
>
> So, hmm. I am a bit concerned about this as syslog-over-stream
> uses NL as a record separator. syslog-over-dgram doesn't need it as
> record separator, but I am not sure what the various implementations of
> syslog actually do if they encounter it. We should probably do what
> the majority of those other implementations do by default as well, for
> whatever that is...
>
>> Reproducer:
>>
>> 1. Add following four lines to /etc/rsyslog.conf
>>
>> ----------
>> $EscapeControlCharactersOnReceive off
>> $ActionFileDefaultTemplate RSYSLOG_SysklogdFileFormat
>> $SpaceLFOnReceive on
>> $DropTrailingLFOnReception off
>
> What does rsyslog do by default without these options?
It just throws away anything after the \n
>
>> ----------
>>
>> 3. Restart rsyslog
>> # service rsyslog restart
>>
>> 4. Compile and run the following program
>>
>> ----------
>> #include <stdio.h>
>> #include <syslog.h>
>>
>> int main()
>> {
>> syslog(LOG_INFO, "aaa%caaa", '\n');
>> return 0;
>> }
>> ----------
>
> Hmm, what happens if you passs \n inside the static string directly? Why
> the work-around via %c? How does that change behaviour?
I just copied the example from the bug report, but you get the same behavior by
using:
syslog(LOG_INFO, "aaa\naaa");
>
> (I am not against this patch, just trying to figure out the precise implications...)
>
> Lennart
>
More information about the systemd-devel
mailing list