diff --git a/actions/admin/settings/130.webserver.php b/actions/admin/settings/130.webserver.php
index 4374b148..35ac4857 100644
--- a/actions/admin/settings/130.webserver.php
+++ b/actions/admin/settings/130.webserver.php
@@ -104,14 +104,54 @@ return array(
'save_method' => 'storeSettingField'
),
'system_logfiles_directory' => array(
- 'label' => $lng['serversettings']['logfiles_directory'],
+ 'label' => (Settings::Get('system.webserver') != 'apache2') ? $lng['serversettings']['logfiles_directory'] : $lng['serversettings']['logfiles_directory2'],
'settinggroup' => 'system',
'varname' => 'logfiles_directory',
'type' => 'string',
- 'string_type' => 'dir',
+ 'string_type' => (Settings::Get('system.webserver') != 'apache2') ? 'dir' : '',
'default' => '/var/customers/logs/',
'save_method' => 'storeSettingField'
),
+ 'system_logfiles_format' => array(
+ 'label' => $lng['serversettings']['logfiles_format'],
+ 'settinggroup' => 'system',
+ 'varname' => 'logfiles_format',
+ 'type' => 'string',
+ 'default' => '',
+ 'string_emptyallowed' => true,
+ 'save_method' => 'storeSettingField',
+ 'websrv_avail' => array(
+ 'apache2',
+ 'nginx'
+ )
+ ),
+ 'system_logfiles_type' => array(
+ 'label' => $lng['serversettings']['logfiles_type'],
+ 'settinggroup' => 'system',
+ 'varname' => 'logfiles_type',
+ 'type' => 'option',
+ 'default' => '1',
+ 'option_mode' => 'one',
+ 'option_options' => array(
+ '1' => 'combined',
+ '2' => 'vhost_combined'
+ ),
+ 'save_method' => 'storeSettingField',
+ 'websrv_avail' => array(
+ 'apache2'
+ )
+ ),
+ 'system_logfiles_piped' => array(
+ 'label' => $lng['serversettings']['logfiles_piped'],
+ 'settinggroup' => 'system',
+ 'varname' => 'logfiles_piped',
+ 'type' => 'bool',
+ 'default' => false,
+ 'save_method' => 'storeSettingField',
+ 'websrv_avail' => array(
+ 'apache2'
+ )
+ ),
'system_customersslpath' => array(
'label' => $lng['serversettings']['customerssl_directory'],
'settinggroup' => 'system',
diff --git a/install/froxlor.sql b/install/froxlor.sql
index bdad8357..a3b63af7 100644
--- a/install/froxlor.sql
+++ b/install/froxlor.sql
@@ -656,6 +656,9 @@ opcache.interned_strings_buffer'),
('system', 'nssextrausers', '0'),
('system', 'disable_le_selfcheck', '0'),
('system', 'ssl_protocols', 'TLSv1,TLSv1.2'),
+ ('system', 'logfiles_format', ''),
+ ('system', 'logfiles_type', '1'),
+ ('system', 'logfiles_piped', '0'),
('panel', 'decimal_places', '4'),
('panel', 'adminmail', 'admin@SERVERNAME'),
('panel', 'phpmyadmin_url', ''),
diff --git a/install/updates/froxlor/0.9/update_0.9.inc.php b/install/updates/froxlor/0.9/update_0.9.inc.php
index 0e9c09e6..c1a9010e 100644
--- a/install/updates/froxlor/0.9/update_0.9.inc.php
+++ b/install/updates/froxlor/0.9/update_0.9.inc.php
@@ -3948,3 +3948,14 @@ if (isDatabaseVersion('201802130')) {
updateToDbVersion('201802250');
}
+
+if (isDatabaseVersion('201802250')) {
+
+ showUpdateStep("Adding webserver logfile settings");
+ Settings::AddNew("system.logfiles_format", '');
+ Settings::AddNew("system.logfiles_type", '1');
+ Settings::AddNew("system.logfiles_piped", '0');
+ lastStepStatus(0);
+
+ updateToDbVersion('201805240');
+}
diff --git a/lib/version.inc.php b/lib/version.inc.php
index 9ad32b3a..65278766 100644
--- a/lib/version.inc.php
+++ b/lib/version.inc.php
@@ -19,7 +19,7 @@
$version = '0.9.39.5';
// Database version (YYYYMMDDC where C is a daily counter)
-$dbversion = '201802250';
+$dbversion = '201805240';
// Distribution branding-tag (used for Debian etc.)
$branding = '';
diff --git a/lng/english.lng.php b/lng/english.lng.php
index fe156bf9..717948a2 100644
--- a/lng/english.lng.php
+++ b/lng/english.lng.php
@@ -337,6 +337,14 @@ $lng['serversettings']['documentroot_prefix']['title'] = 'Home directory';
$lng['serversettings']['documentroot_prefix']['description'] = 'Where should all home directories be stored?';
$lng['serversettings']['logfiles_directory']['title'] = 'Logfiles directory';
$lng['serversettings']['logfiles_directory']['description'] = 'Where should all log files be stored?';
+$lng['serversettings']['logfiles_directory2']['title'] = 'Logfiles directory or custom script';
+$lng['serversettings']['logfiles_directory2']['description'] = 'Where should all log files be stored? Optionally, you can specify a script here and use the placeholder {LOGFILE} if needed. In case of a custom script you will need to activate the logfiles piped option';
+$lng['serversettings']['logfiles_format']['title'] = 'Access-log format';
+$lng['serversettings']['logfiles_format']['description'] = 'Enter a custom log-format here according to your webservers specifications, leave empty for default';
+$lng['serversettings']['logfiles_type']['title'] = 'Access-log type';
+$lng['serversettings']['logfiles_type']['description'] = 'Chose between combined or vhost_combined here.';
+$lng['serversettings']['logfiles_piped']['title'] = 'Pipe webserver logfiles to specified script (see above)';
+$lng['serversettings']['logfiles_piped']['description'] = 'When using a custom script for the logfiles you need to activate this in order for it to be executed';
$lng['serversettings']['ipaddress']['title'] = 'IP-address';
$lng['serversettings']['ipaddress']['description'] = 'What\'s the main IP-address of this server?';
$lng['serversettings']['hostname']['title'] = 'Hostname';
diff --git a/scripts/jobs/cron_tasks.inc.http.10.apache.php b/scripts/jobs/cron_tasks.inc.http.10.apache.php
index 5f966f38..2c5db125 100644
--- a/scripts/jobs/cron_tasks.inc.http.10.apache.php
+++ b/scripts/jobs/cron_tasks.inc.http.10.apache.php
@@ -733,8 +733,22 @@ class apache extends HttpConfigBase
chown($access_log, Settings::Get('system.httpuser'));
chgrp($access_log, Settings::Get('system.httpgroup'));
- $logfiles_text .= ' ErrorLog "' . $error_log . "\"\n";
- $logfiles_text .= ' CustomLog "' . $access_log . '" combined' . "\n";
+ $logtype = 'combined';
+ if (Settings::Get('system.logfiles_format') != '') {
+ $logtype = 'frx_custom';
+ $logfiles_text .= ' LogFormat "' . Settings::Get('system.logfiles_format') . '" ' . $logtype . "\n";
+ }
+ if (Settings::Get('system.logfiles_type') == '2' && Settings::Get('system.logfiles_format') == '') {
+ $logtype = 'vhost_combined';
+ }
+
+ if (Settings::Get('system.logfiles_piped') == '1') {
+ $logfiles_text .= ' ErrorLog "|' . str_replace('{LOGFILE}', $error_log, Settings::Get('system.logfiles_directory')) . "\"\n";
+ $logfiles_text .= ' CustomLog "|' . str_replace('{LOGFILE}', $access_log, Settings::Get('system.logfiles_directory')) . '" ' . $logtype . "\n";
+ } else {
+ $logfiles_text .= ' ErrorLog "' . $error_log . '"' . "\n";
+ $logfiles_text .= ' CustomLog "' . $access_log . '" ' . $logtype . "\n";
+ }
if (Settings::Get('system.awstats_enabled') == '1') {
if ((int) $domain['parentdomainid'] == 0) {
diff --git a/scripts/jobs/cron_tasks.inc.http.30.nginx.php b/scripts/jobs/cron_tasks.inc.http.30.nginx.php
index f5bb1efe..c11dafeb 100644
--- a/scripts/jobs/cron_tasks.inc.http.30.nginx.php
+++ b/scripts/jobs/cron_tasks.inc.http.30.nginx.php
@@ -1005,7 +1005,13 @@ class nginx extends HttpConfigBase
chown($access_log, Settings::Get('system.httpuser'));
chgrp($access_log, Settings::Get('system.httpgroup'));
- $logfiles_text .= "\t" . 'access_log ' . $access_log . ' combined;' . "\n";
+ $logtype = 'combined';
+ if (Settings::Get('system.logfiles_format') != '') {
+ $logtype = 'frx_custom';
+ $logfiles_text .= "\t" . 'log_format ' . $logtype . ' "' . Settings::Get('system.logfiles_format') . '";' . "\n";
+ }
+
+ $logfiles_text .= "\t" . 'access_log ' . $access_log . ' ' . $logtype . ';' . "\n";
$logfiles_text .= "\t" . 'error_log ' . $error_log . ' error;' . "\n";
if (Settings::Get('system.awstats_enabled') == '1') {