From 3786a48aeb27b0ee54694103e0c19808a62ff5e0 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 16 Jan 2014 03:02:02 -0500
Subject: [PATCH] * New option that write logs to per-user directories. (Debug) logs will only be written if a directory for the current user exists. * The 'write_log' plugin hook now also supports the return property 'dir' to let plugins specify the log directory.
---
program/lib/Roundcube/rcube.php | 26 +++++++++++++++++++++++++-
config/defaults.inc.php | 4 ++++
2 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/config/defaults.inc.php b/config/defaults.inc.php
index b4c0206..b1e3bc8 100644
--- a/config/defaults.inc.php
+++ b/config/defaults.inc.php
@@ -73,6 +73,10 @@
// For possible values see installer or http://php.net/manual/en/function.openlog.php
$config['syslog_facility'] = LOG_USER;
+// Activate this option if logs should be written to per-user directories.
+// Data will only be logged if a directry <log_dir>/<username>/ exists and is writable.
+$config['per_user_logging'] = false;
+
// Log sent messages to <log_dir>/sendmail or to syslog
$config['smtp_log'] = true;
diff --git a/program/lib/Roundcube/rcube.php b/program/lib/Roundcube/rcube.php
index 503e29d..d58eb08 100644
--- a/program/lib/Roundcube/rcube.php
+++ b/program/lib/Roundcube/rcube.php
@@ -1114,7 +1114,20 @@
// log_driver == 'file' is assumed here
$line = sprintf("[%s]: %s\n", $date, $line);
- $log_dir = self::$instance ? self::$instance->config->get('log_dir') : null;
+ $log_dir = null;
+
+ // per-user logging is activated
+ if (self::$instance && self::$instance->config->get('per_user_logging', false) && self::$instance->get_user_id()) {
+ $log_dir = self::$instance->get_user_log_dir();
+ if (empty($log_dir))
+ return false;
+ }
+ else if (!empty($log['dir'])) {
+ $log_dir = $log['dir'];
+ }
+ else if (self::$instance) {
+ $log_dir = self::$instance->config->get('log_dir');
+ }
if (empty($log_dir)) {
$log_dir = RCUBE_INSTALL_PATH . 'logs';
@@ -1352,6 +1365,17 @@
}
}
+ /**
+ * Get the per-user log directory
+ */
+ protected function get_user_log_dir()
+ {
+ $log_dir = $this->config->get('log_dir', RCUBE_INSTALL_PATH . 'logs');
+ $user_name = $this->get_user_name();
+ $user_log_dir = $log_dir . '/' . $user_name;
+
+ return !empty($user_name) && is_writable($user_log_dir) ? $user_log_dir : false;
+ }
/**
* Getter for logged user language code.
--
Gitblit v1.9.1