On Wed, Feb 14, 2018 at 1:39 AM, Darrick J. Wong <darrick.wong@xxxxxxxxxx> wrote: > On Mon, Feb 12, 2018 at 02:47:14PM -0600, Eric Sandeen wrote: >> On 2/5/18 5:22 PM, Darrick J. Wong wrote: >> > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> >> > >> > Record the output of an interactive session in the system log so that >> > future support requests can get a better picture of what happened. >> > >> > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> >> >> I really want to log things, but I'm conflicted about spamming syslog. >> I'm wondering if a generic /var/log/xfs.log would be good, and it could >> eventually log all xfs-related administrative actions and outcomes with >> a libfrog library helper... I don't know how non-syslog log files are >> handled in general, does everybody just roll their own? > > Evidently rsyslog actually can filter things out to a separate file. > For example, /etc/rsyslog.d/20-ufw.conf: > > # Log kernel generated UFW log messages to file > :msg,contains,"[UFW " /var/log/ufw.log > > # Uncomment the following to stop logging anything that matches the last > # rule. Doing this will stop logging kernel generated UFW log messages > # to the file normally containing kern.* messages (eg, > # /var/log/kern.log) > #& stop > > Therefore, it looks as though we actually /can/ use the regular syslog > calls from various xfs utilities and (if rsyslog is up) forward the > output to a place where support can capture it later. > I wanted to join Eric in this, but I didn't know about the filter rules, thanks for something new to learn. With such a rule, I'm all for syslog, and I'm attaching my first humble reviewed-by. :-) Cheers, Jan > --D > >> >> I'm inclined to leave this one out of 4.15 for now while I/we think >> about the big picture here. >> >> -Eric >> >> > --- >> > scrub/common.c | 37 +++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 37 insertions(+) >> > >> > >> > diff --git a/scrub/common.c b/scrub/common.c >> > index 17c3699..672f286 100644 >> > --- a/scrub/common.c >> > +++ b/scrub/common.c >> > @@ -21,6 +21,7 @@ >> > #include <pthread.h> >> > #include <stdbool.h> >> > #include <sys/statvfs.h> >> > +#include <syslog.h> >> > #include "platform_defs.h" >> > #include "xfs.h" >> > #include "xfs_fs.h" >> > @@ -29,6 +30,8 @@ >> > #include "common.h" >> > #include "progress.h" >> > >> > +extern char *progname; >> > + >> > /* >> > * Reporting Status to the Console >> > * >> > @@ -64,6 +67,12 @@ static const char *err_str[] = { >> > [S_PREEN] = "Optimized", >> > }; >> > >> > +static int log_level[] = { >> > + [S_ERROR] = LOG_ERR, >> > + [S_WARN] = LOG_WARNING, >> > + [S_INFO] = LOG_INFO, >> > +}; >> > + >> > /* If stream is a tty, clear to end of line to clean up progress bar. */ >> > static inline const char *stream_start(FILE *stream) >> > { >> > @@ -73,6 +82,8 @@ static inline const char *stream_start(FILE *stream) >> > } >> > >> > /* Print a warning string and some warning text. */ >> > +#define LOG_BUFSZ 4096 >> > +#define LOGNAME_BUFSZ 256 >> > void >> > __str_out( >> > struct scrub_ctx *ctx, >> > @@ -110,6 +121,32 @@ __str_out( >> > va_end(args); >> > } >> > >> > + /* If we're running interactively, log the message to syslog too. */ >> > + if (isatty(fileno(stdin)) && !debug) { >> > + char logname[LOGNAME_BUFSZ]; >> > + >> > + snprintf(logname, LOGNAME_BUFSZ, "%s@%s", progname, >> > + ctx->mntpoint); >> > + openlog(logname, LOG_PID, LOG_DAEMON); >> > + >> > + if (error) { >> > + syslog(LOG_ERR, "%s: %s: %s.", >> > + _(err_str[level]), descr, >> > + strerror_r(error, buf, DESCR_BUFSZ)); >> > + } else { >> > + char buf[LOG_BUFSZ]; >> > + int sz; >> > + >> > + sz = snprintf(buf, LOG_BUFSZ, "%s: %s: ", >> > + _(err_str[level]), descr); >> > + va_start(args, format); >> > + vsnprintf(buf + sz, LOG_BUFSZ - sz, format, args); >> > + va_end(args); >> > + syslog(log_level[level], "%s", buf); >> > + } >> > + closelog(); >> > + } >> > + >> > if (debug) >> > fprintf(stream, _(" (%s line %d)"), file, line); >> > fprintf(stream, "\n"); >> > >> > -- >> > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in >> > the body of a message to majordomo@xxxxxxxxxxxxxxx >> > More majordomo info at http://vger.kernel.org/majordomo-info.html >> > >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html