[Dnsmasq-discuss] Patch to change dnsmasq logentries
Olaf Westrik
weizen_42 at ipcop-forum.de
Fri Feb 27 18:25:26 GMT 2009
Thanks for the feedback.
>I'm happy with the general principle, but the method you have used has
>the effect of changing LOTS of literal strings in the code. That makes
>large amounts of the translations out of date, when the messages have
>not really changed at all.
Right. I did not think about that. I see you have translated texts, but
I did not notice that they are used for log messages too.
Knowing that keeping translations up-to-date is a pain in the b*, this
rules out my suggestion.
>As an alternative, how about using some of the log-facility bits in the
>first argument of my_syslog, and appending the extra text in the
>my_syslog code.
>
>
>#define MS_TFTP LOG_LOCAL0
>#define MS_DHCP LOG_LOCAL1
>
>my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring domain %s for DHCP host
>name %s"), config_domain, hostname);
>
>in my_syslog()
>
>if (level | MS_DHCP)
> { extratext = "DHCP";
> level &= ~MS_DHCP;
> }
>
>etc..
OK.
>> OTOH, changing the strings will make the logs more concise...
>>
> Only a few, and it adds lots of copies of the string "DHCP:" to the
> binary. The ones which are obviously more concise could be changed.
>
Yes. I noticed some inconsistencies but not enough to warrant a complete
overhaul.
>> >Also, I suspect that there are quite a few people doing pattern-matching
>> >on the log strings, maybe it would be less likely to break that if the
>> >sub-function was added to the ident:
>> >
>> >Feb 27 07:38:41 fw dnsmasq-dhcp[29780]: DHCPREQUEST(lan-1) 192.168.10.44
>> >00:3F:56:20:11:f1
>>
>>
>
>
>> This will break those that select by the program name, for example in
>> syslog-ng. Changing anything in the log will likely break someone
>> somewhere. Olaf's proposal might be less intrusive in this respect.
>>
>
> Ah! That makes it easy for Olaf to achieve his original aim, assuming he
> uses sylog-ng. This change is less obviously right, the extra-bits in
> the syslog argument method can almost as easily be used to append to the
> actual message. That's pretty non-negotiable, but I'm happy to append or
> change the id, as people think best.
>
>
As a matter of fact, changing the program name works better in my case.
We do all the logging straight to /var/log/messages and then use regex's
to separate.
Using program names dnsmasq, dnsmasq-dhcp and dnsmasq-tftp makes that a
trivial exercise. Much easier than first filtering on dnsmasq and than
identifying logs with and without DHCP:
How about this:
- Add to dnsmasq.h
#define MS_TFTP LOG_LOCAL0
#define MS_DHCP LOG_LOCAL1
- Add an option --log-separation which is disabled by default.
- Modify the relevant my_syslog calls to add MS_TFTP or MS_DHCP
- Modify log.c, to (optionally) include -dhcp and -tftp, something like
this:
if (!log_to_file)
p += sprintf(p, "<%d>", LOG_PRI(priority) | log_fac);
if ((daemon->options2 & OPT_LOG2_LOG_SEPARATION) && (priority &
MS_TFTP))
p += sprintf(p, "%.15s dnsmasq-tftp[%d]: ", ctime(&time_now) +
4, (int)pid);
else if ((daemon->options2 & OPT_LOG2_LOG_SEPARATION) && (priority &
MS_DHCP))
p += sprintf(p, "%.15s dnsmasq-dhcp[%d]: ", ctime(&time_now) +
4, (int)pid);
else
p += sprintf(p, "%.15s dnsmasq[%d]: ", ctime(&time_now) + 4,
(int)pid);
Notes: I think the options flagbits are all used since options in daemon
is unsigned int, therefore options2 would be required.
On further thought, using LOG_LOCAL0 collides with the OPT_DEBUG option,
and possibly people using --log-facility
Better to use bits that are higher than LOG_NFACILITIES ?
Or even better to simply change the my_syslog to add another parameter?
void my_syslog(int priority, char *programid, const char *format, ...);
Where programid can be NULL or "tftp", "dhcp" ...
> If you're happy with that, Olaf, I'm happy to do the coding if you're
> happy to visit each my_syslog call and add the extra bits instead of the
> extra characters.....
No, no. This is my request/wish, so I have to put code where my mouth
is ... ;-)
Olaf
More information about the Dnsmasq-discuss
mailing list