e331f6b248
existing core code. Add OK hook. * lib/Qpsmtpd.pm (init_logger): replaced with log_level() (load_logging): NEW - load logging plugins without calling log() (log_level): NEW - set/get global $LogLevel scalar (log): now just a wrapper for varlog(); called only by core code (varlog): initializes logging if not already done, calls logging plugins in turn and falls back to interal logging unless plugins OK or DECLINED (_load_plugins): only display "Loading plugin" when actually loading one (run_hooks): load logging plugins without calling log(); add OK hook as else of the DENY* case (spool_dir): use global $Spool_dir scalar to cache location * lib/Qpsmtpd/Plugin.pm (%hooks): add "logging" and "ok" (register_hook): add local _hook to object cache (log): call varlog() with additional parameters hook and plugin_name except for logging hook (compile): add accessor sub for local _hook scalar * lib/Qpsmtpd/SMTP.pm (mail, rcpt): change loglevel to LOGALERT instead of LOGWARN for from/to * qpsmtpd-forkserver (REAPER): use package ::log() instead of warn() (main): defer calling log until $plugin_loader has been initialized (log): call logging using the $plugin_loader object * plugins/logging/warn NEW: sample plugin which replicates the core logging functionality * plugins/logging/devnull NEW: sample plugin which logs nothing (for testing multiple logging plugin functionality) * config.sample/logging sample configuration file for logging plugins * plugins/virus/uvscan plugins/virus/clamav Increase loglevel for non-serious warnings to LOGWARN from LOGERROR git-svn-id: https://svn.perl.org/qpsmtpd/trunk@398 958fd67b-6ff1-0310-b445-bb7760255be9
39 lines
1.1 KiB
Perl
39 lines
1.1 KiB
Perl
#!/usr/bin/perl
|
|
# this is a simple 'warn' plugin like the default builtin logging
|
|
#
|
|
# It demonstrates that a logging plugin can call ->log itself as well
|
|
# as how to ignore log entries from itself
|
|
|
|
sub register {
|
|
my ($self, $qp, $loglevel) = @_;
|
|
|
|
$self->{_level} = LOGWARN;
|
|
if (defined($loglevel) and ($loglevel =~ /^\d+$/)) {
|
|
$self->{_level} = $loglevel;
|
|
}
|
|
$self->register_hook('logging', 'wlog');
|
|
|
|
# If you want to capture this log entry with this plugin, you need to
|
|
# wait until after you register the plugin
|
|
$self->log(LOGINFO,'Initializing logging::warn plugin');
|
|
}
|
|
|
|
sub wlog {
|
|
my ($self, $transaction, $trace, $hook, $plugin, @log) = @_;
|
|
|
|
# Don't log your own log entries! If this is the only logging plugin
|
|
# then these lines will not be logged at all. You can safely comment
|
|
# out this line and it will not cause an infinite loop.
|
|
return DECLINED if defined $plugin and $plugin eq $self->plugin_name;
|
|
|
|
warn
|
|
join(" ", $$ .
|
|
(defined $plugin ? " $plugin plugin:" :
|
|
defined $hook ? " running plugin ($hook):" : ""),
|
|
@log), "\n"
|
|
if ($trace <= $self->{_level});
|
|
|
|
return DECLINED;
|
|
}
|
|
|