From 72340b2230841b33998a52fe62d6cbbf0eeb4fc3 Mon Sep 17 00:00:00 2001 From: Johannes Ernst Date: Mon, 18 Jun 2018 18:29:31 +0000 Subject: [PATCH] Added Systemd.log documentation to config.sample.php Changed name of default system (not systemd) logger from ownCloud to Nextcloud, to be consistent Fixed license per https://github.com/nextcloud/server/pull/9760#discussion_r195026784 Pulled upstream updates Signed-off-by: Johannes Ernst --- config/config.sample.php | 22 +++++++++++++++------- lib/private/Log/Syslog.php | 2 +- lib/private/Log/Systemdlog.php | 16 +++++++++++++--- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index 2218021bab..68f27ed032 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -710,18 +710,24 @@ $CONFIG = array( */ /** - * By default the Nextcloud logs are sent to the ``nextcloud.log`` file in the - * default Nextcloud data directory. - * If syslogging is desired, set this parameter to ``syslog``. - * Setting this parameter to ``errorlog`` will use the PHP error_log function - * for logging. + * This parameter determines where the Nextcloud logs are sent. + * ``file``: the logs are written to file ``nextcloud.log`` in the default + * Nextcloud data directory. The log file can be changed with parameter + * ``logfile``. + * ``syslog``: the logs are sent to the system log. This requires a syslog daemon + * to be active. + * ``errorlog``: the logs are sent to the PHP ``error_log`` function. + * ``systemd``: the logs are sent to the Systemd journal. This requires a system + * that runs Systemd and the Systemd journal. The PHP extension ``systemd`` + * must be installed and active. * * Defaults to ``file`` */ 'log_type' => 'file', /** - * Log file path for the Nextcloud logging type. + * Name of the file to which the Nextcloud logs are written if parameter + * ``log_type`` is set to ``file``. * * Defaults to ``[datadirectory]/nextcloud.log`` */ @@ -738,7 +744,9 @@ $CONFIG = array( /** * If you maintain different instances and aggregate the logs, you may want * to distinguish between them. ``syslog_tag`` can be set per instance - * with a unique id. Only available if ``log_type`` is set to ``syslog``. + * with a unique id. Only available if ``log_type`` is set to ``syslog`` or + * ``systemd``. + * * The default value is ``Nextcloud``. */ 'syslog_tag' => 'Nextcloud', diff --git a/lib/private/Log/Syslog.php b/lib/private/Log/Syslog.php index 90a20026f0..b652eb4343 100644 --- a/lib/private/Log/Syslog.php +++ b/lib/private/Log/Syslog.php @@ -39,7 +39,7 @@ class Syslog implements IWriter { ]; public function __construct(IConfig $config) { - openlog($config->getSystemValue('syslog_tag', 'ownCloud'), LOG_PID | LOG_CONS, LOG_USER); + openlog($config->getSystemValue('syslog_tag', 'Nextcloud'), LOG_PID | LOG_CONS, LOG_USER); } public function __destruct() { diff --git a/lib/private/Log/Systemdlog.php b/lib/private/Log/Systemdlog.php index 63b228bfa0..40e9c12386 100644 --- a/lib/private/Log/Systemdlog.php +++ b/lib/private/Log/Systemdlog.php @@ -4,7 +4,7 @@ * * @author Johannes Ernst * - * @license AGPL-3.0 + * @license GNU AGPL version 3 or any later version * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, @@ -22,6 +22,7 @@ namespace OC\Log; +use OC\HintException; use OCP\ILogger; use OCP\IConfig; use OCP\Log\IWriter; @@ -50,11 +51,20 @@ class Systemdlog implements IWriter { ILogger::FATAL => 2, ]; + protected $syslogId; + public function __construct(IConfig $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->getSystemValue('syslog_tag', 'Nextcloud'); } /** - * write a message in the log + * Write a message to the log. * @param string $app * @param string $message * @param int $level @@ -62,7 +72,7 @@ class Systemdlog implements IWriter { public function write(string $app, $message, int $level) { $journal_level = $this->levels[$level]; sd_journal_send('PRIORITY='.$journal_level, - 'SYSLOG_IDENTIFIER=nextcloud', + 'SYSLOG_IDENTIFIER='.$this->syslogId, 'MESSAGE={'.$app.'} '.$message); } }