diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2022-01-25 10:25:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-25 10:25:13 +0100 |
commit | 272f4cd6df791733a6376679bcc936fe492d9e61 (patch) | |
tree | 000f674ea3b3a141640ed2ad369389d8f6196eb6 | |
parent | 562c5730052b83a36b647bbd2db653dc57227f16 (diff) | |
parent | 497c5841fc60b587dba84dd9ea14e4cccee656fd (diff) | |
download | nextcloud-server-272f4cd6df791733a6376679bcc936fe492d9e61.tar.gz nextcloud-server-272f4cd6df791733a6376679bcc936fe492d9e61.zip |
Merge pull request #30763 from nextcloud/feature/noid/allow-to-log-audit-to-syslog
-rw-r--r-- | apps/admin_audit/lib/AppInfo/Application.php | 18 | ||||
-rw-r--r-- | config/config.sample.php | 27 | ||||
-rw-r--r-- | lib/private/Log/Errorlog.php | 9 | ||||
-rw-r--r-- | lib/private/Log/LogFactory.php | 20 | ||||
-rw-r--r-- | lib/private/Log/Syslog.php | 7 | ||||
-rw-r--r-- | lib/private/Log/Systemdlog.php | 7 | ||||
-rw-r--r-- | lib/public/Log/ILogFactory.php | 6 |
7 files changed, 77 insertions, 17 deletions
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php index 7b5fb520bc9..594e1c7f2c4 100644 --- a/apps/admin_audit/lib/AppInfo/Application.php +++ b/apps/admin_audit/lib/AppInfo/Application.php @@ -96,15 +96,19 @@ class Application extends App implements IBootstrap { } private function getLogger(IConfig $config, - LoggerInterface $logger, ILogFactory $logFactory): LoggerInterface { - $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log'; - $logFile = $config->getAppValue('admin_audit', 'logfile', $default); - - if ($logFile === null) { - return $logger; + $auditType = $config->getSystemValueString('log_type_audit', 'file'); + $defaultTag = $config->getSystemValueString('syslog_tag', 'Nextcloud'); + $auditTag = $config->getSystemValueString('syslog_tag_audit', $defaultTag); + $logFile = $config->getSystemValueString('logfile_audit', ''); + + if ($auditType === 'file' && !$logFile) { + $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log'; + // Legacy way was appconfig, now it's paralleled with the normal log config + $logFile = $config->getAppValue('admin_audit', 'logfile', $default); } - return $logFactory->getCustomPsrLogger($logFile); + + return $logFactory->getCustomPsrLogger($logFile, $auditType, $auditTag); } /** diff --git a/config/config.sample.php b/config/config.sample.php index 3dcde590d89..1e883aef358 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -847,6 +847,13 @@ $CONFIG = [ 'log_type' => 'file', /** + * This parameter determines where the audit logs are sent. See ``log_type`` for more information. + * + * Defaults to ``file`` + */ +'log_type_audit' => 'file', + +/** * Name of the file to which the Nextcloud logs are written if parameter * ``log_type`` is set to ``file``. * @@ -855,7 +862,15 @@ $CONFIG = [ 'logfile' => '/var/log/nextcloud.log', /** - * Log file mode for the Nextcloud loggin type in octal notation. + * Name of the file to which the audit logs are written if parameter + * ``log_type`` is set to ``file``. + * + * Defaults to ``[datadirectory]/audit.log`` + */ +'logfile_audit' => '/var/log/audit.log', + +/** + * Log file mode for the Nextcloud logging type in octal notation. * * Defaults to 0640 (writeable by user, readable by group). */ @@ -880,6 +895,16 @@ $CONFIG = [ 'syslog_tag' => 'Nextcloud', /** + * If you maintain different instances and aggregate the logs, you may want + * to distinguish between them. ``syslog_tag_audit`` can be set per instance + * with a unique id. Only available if ``log_type`` is set to ``syslog`` or + * ``systemd``. + * + * The default value is the value of ``syslog_tag``. + */ +'syslog_tag_audit' => 'Nextcloud', + +/** * Log condition for log level increase based on conditions. Once one of these * conditions is met, the required log level is set to debug. This allows to * debug specific requests, users or apps diff --git a/lib/private/Log/Errorlog.php b/lib/private/Log/Errorlog.php index ebcb73be4ce..d27759d7050 100644 --- a/lib/private/Log/Errorlog.php +++ b/lib/private/Log/Errorlog.php @@ -29,6 +29,13 @@ use OCP\Log\IWriter; class Errorlog implements IWriter { + /** @var string */ + protected $tag; + + public function __construct(string $tag = 'owncloud') { + $this->tag = $tag; + } + /** * write a message in the log * @param string $app @@ -36,6 +43,6 @@ class Errorlog implements IWriter { * @param int $level */ public function write(string $app, $message, int $level) { - error_log('[owncloud]['.$app.']['.$level.'] '.$message); + error_log('[' . $this->tag . ']['.$app.']['.$level.'] '.$message); } } diff --git a/lib/private/Log/LogFactory.php b/lib/private/Log/LogFactory.php index f0f804cd51c..807ff501e39 100644 --- a/lib/private/Log/LogFactory.php +++ b/lib/private/Log/LogFactory.php @@ -70,8 +70,24 @@ class LogFactory implements ILogFactory { return new Log($log, $this->systemConfig); } - public function getCustomPsrLogger(string $path): LoggerInterface { - $log = $this->buildLogFile($path); + protected function createNewLogger(string $type, string $tag, string $path): IWriter { + switch (strtolower($type)) { + case 'errorlog': + return new Errorlog($tag); + case 'syslog': + return new Syslog($this->systemConfig, $tag); + case 'systemd': + return new Systemdlog($this->systemConfig, $tag); + case 'file': + case 'owncloud': + case 'nextcloud': + default: + return $this->buildLogFile($path); + } + } + + public function getCustomPsrLogger(string $path, string $type = 'file', string $tag = 'Nextcloud'): LoggerInterface { + $log = $this->createNewLogger($type, $tag, $path); return new PsrLoggerAdapter( new Log($log, $this->systemConfig) ); diff --git a/lib/private/Log/Syslog.php b/lib/private/Log/Syslog.php index 7c3d1a54b78..8140b4ec77c 100644 --- a/lib/private/Log/Syslog.php +++ b/lib/private/Log/Syslog.php @@ -38,9 +38,12 @@ class Syslog extends LogDetails implements IWriter { ILogger::FATAL => LOG_CRIT, ]; - public function __construct(SystemConfig $config) { + public function __construct(SystemConfig $config, ?string $tag = null) { parent::__construct($config); - openlog($config->getValue('syslog_tag', 'Nextcloud'), LOG_PID | LOG_CONS, LOG_USER); + if ($tag === null) { + $tag = $config->getValue('syslog_tag', 'Nextcloud'); + } + openlog($tag, LOG_PID | LOG_CONS, LOG_USER); } public function __destruct() { diff --git a/lib/private/Log/Systemdlog.php b/lib/private/Log/Systemdlog.php index a01826c0b05..00f242e3718 100644 --- a/lib/private/Log/Systemdlog.php +++ b/lib/private/Log/Systemdlog.php @@ -56,14 +56,17 @@ class Systemdlog extends LogDetails implements IWriter { protected $syslogId; - public function __construct(SystemConfig $config) { + public function __construct(SystemConfig $config, ?string $tag = null) { parent::__construct($config); if (!function_exists('sd_journal_send')) { throw new HintException( 'PHP extension php-systemd is not available.', 'Please install and enable PHP extension systemd if you wish to log to the Systemd journal.'); } - $this->syslogId = $config->getValue('syslog_tag', 'Nextcloud'); + if ($tag === null) { + $tag = $config->getValue('syslog_tag', 'Nextcloud'); + } + $this->syslogId = $tag; } /** diff --git a/lib/public/Log/ILogFactory.php b/lib/public/Log/ILogFactory.php index 54ed761a8e7..6bbcf93bca8 100644 --- a/lib/public/Log/ILogFactory.php +++ b/lib/public/Log/ILogFactory.php @@ -51,8 +51,10 @@ interface ILogFactory { /** * @param string $path + * @param string $type + * @param string $tag * @return LoggerInterface - * @since 22.0.0 + * @since 22.0.0 - Parameters $type and $tag were added in 24.0.0 */ - public function getCustomPsrLogger(string $path): LoggerInterface; + public function getCustomPsrLogger(string $path, string $type = 'file', string $tag = 'Nextcloud'): LoggerInterface; } |