Applets send errors to syslog during normal, successful operation
Denys Vlasenko
vda.linux at googlemail.com
Sun Feb 4 18:53:20 UTC 2018
On Thu, Nov 30, 2017 at 9:51 PM, Tito <farmatito at tiscali.it> wrote:
> On 11/30/2017 08:26 PM, Deweloper wrote:
>> Many applets are daemons (or can be run as daemons) and send messages to
>> syslog. The problem is that the messages don't have accurate, individually
>> assigned severity; they are all LOG_ERR. Effectively, system administrator sees
>> a lot of ERRORs in the log even when everything goes well. It seems that libbb
>> provides only bb_error_msg() as a convenient way to print a message (including
>> sending it to syslog), while a more generic function taking severity as well
>> would be needed instead. grep -r 'syslog(' shows that only some loginutils call
>> syslog() directly. In other places bb_error_msg() is used even for
>> informational or verbose debugging messages. Just have a look at output of
>> grep -r 'bb_error_msg('
>>
>> Do you have an idea how to clean this up? Shouldn't these messages be sent to a
>> new function, e.g. bb_msg(), which would additionally take "severity" argument?
The "severity" arg usually ends up being a PITA.
For example, it's rather unreadable.
Then, it tends to proliferate: after you have errors/not-errors,
then someone wants critical/errors/not-errors/debug - which adds
another dimension to coding every error message: "what severity is it?!"
> 4) create a function that changes syslog_level to LOG_INFO, add it to libbb,
> and then change the code of the applets accordingly, for example:
>
> void FAST_FUNC bb_info_msg(const char *s, ...)
> {
> va_list p;
> #if ENABLE_FEATURE_SYSLOG
> smallint syslog_level_old = syslog_level;
> syslog_level = LOG_INFO;
> #endif
> va_start(p, s);
> bb_verror_msg(s, p, NULL);
> #if ENABLE_FEATURE_SYSLOG
> syslog_level = syslog_level_old;
> #endif
> va_end(p);
> }
I like this. Feel free to send patches doing this.
> I wonder if the compiler could be so smart to see that this is
> the same as bb_error_msg when ENABLE_FEATURE_SYSLOG is not set
> and optimize it out.
#if !ENABLE_FEATURE_SYSLOG
#define bb_info_msg(...) bb_error_msg(__VA_ARGS__)
#endif
More information about the busybox
mailing list