On Thu, 30 Jan 2025 19:02:45 +0100, Martijn van Duren <opensm...@list.imperialat.at> wrote: > > Hello misc@, > > The diff below adds support for 4 different loglevels to smtpd filters: > warn, info, debug, trace. These for levels are in line with the > loglevels of smtpd itself and are emitted on said levels. > > To keep backwards compatibility and to keep things simpler for coders > who don't care about loglevels, loglines without prefix will be logged > at the warn (brief) level. >
I generally like it. But I feel that one pice is missed. If I make a filter with debug and trace logging, it can be quite noisy. I not sure that it worth to send all debug and trace level logs to smtpd which is ignored due to wrong log level. I suggest to extend handshake protocol and to add a configured log-level, which allows to adjust log level in filter and skip too noisy logs. We also can make it dynamic, but here the catch: 1. we may restart filters after changing a log level, 2. or to send an update for handshake. I think that (1) is safer solution, but I may be wrong. > martijn@ > > diff bfd8327fa29c9064ad80b6cdb8235722bbf18877 > acdf9909bf270b4d19c207f705c0e1bef68c8cc1 > commit - bfd8327fa29c9064ad80b6cdb8235722bbf18877 > commit + acdf9909bf270b4d19c207f705c0e1bef68c8cc1 > blob - b9c5d55c15f9052bc726f1a09484f0e32f75e2f3 > blob + cbd8657110f1cac373d7964c20b9fca57fc17ec1 > --- usr.sbin/smtpd/lka_filter.c > +++ usr.sbin/smtpd/lka_filter.c > @@ -317,8 +317,26 @@ processor_errfd(struct io *io, int evt, void *arg) > > switch (evt) { > case IO_DATAIN: > - while ((line = io_getline(io, &len)) != NULL) > - log_warnx("%s: %s", name, line); > + while ((line = io_getline(io, &len)) != NULL) { > + if (strncasecmp(line, "WARN|", > + sizeof("WARN|") - 1) == 0) > + log_warnx("%s: %s", name, > + line + sizeof("WARN|") - 1); > + else if (strncasecmp(line, "INFO|", > + sizeof("INFO|") - 1) == 0) > + log_info("%s: %s", name, > + line + sizeof("INFO|") - 1); > + else if (strncasecmp(line, "DEBUG|", > + sizeof("DEBUG|") - 1) == 0) > + log_debug("%s: %s", name, > + line + sizeof("DEBUG|") - 1); > + else if (strncasecmp(line, "TRACE|", > + sizeof("TRACE|") - 1) == 0) > + log_trace(TRACE_FILTERS, "%s: %s", name, > + line + sizeof("TRACE|") - 1); > + else > + log_warnx("%s: %s", name, line); > + } > } > } > > blob - 5a1bcbb39e2380f90adc754d4849b1ac7385c1fe > blob + d5636b55abfd4bc86cd865851f4b9aa0cb9f2759 > --- usr.sbin/smtpd/smtpd-filters.7 > +++ usr.sbin/smtpd/smtpd-filters.7 > @@ -74,6 +74,12 @@ and may be written in any language. > must not use blocking I/O, > they must support answering asynchronously to > .Xr smtpd 8 . > +.Pp > +Loglines to > +.Xr stderr 4 > +can be prefixed with WARN|, INFO|, DEBUG|, or TRACE| to specify the level at > +which they need to be logged. > +Lines without a prefix will be logged as warning. > .Sh REPORT AND FILTER > The API relies on two streams, > report and filter. > > -- wbr, Kirill