diff options
Diffstat (limited to 'library/Audit/ProvidedHook/AuditStream.php')
-rw-r--r-- | library/Audit/ProvidedHook/AuditStream.php | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/library/Audit/ProvidedHook/AuditStream.php b/library/Audit/ProvidedHook/AuditStream.php new file mode 100644 index 0000000..b47968d --- /dev/null +++ b/library/Audit/ProvidedHook/AuditStream.php @@ -0,0 +1,38 @@ +<?php + +/* Icinga Web 2 | (c) 2018 Icinga Development Team | GPLv2+ */ + +namespace Icinga\Module\Audit\ProvidedHook; + +use InvalidArgumentException; +use Icinga\Application\Config; +use Icinga\Application\Hook\AuditHook; +use Icinga\Util\File; + +class AuditStream extends AuditHook +{ + public function logMessage($time, $identity, $type, $message, array $data = null) + { + $activityData = [ + 'activity_time' => $time, + 'activity' => $type, + 'message' => $message, + 'identity' => $identity + ]; + if (! empty($data)) { + $activityData['data'] = $data; + } + + $logConfig = Config::module('audit')->getSection('stream'); + if ($logConfig->format === 'json') { + $json = json_encode($activityData, JSON_FORCE_OBJECT); + if ($json === false) { + throw new InvalidArgumentException('Failed to encode message data to JSON: ' . json_last_error_msg()); + } + + $file = new File($logConfig->get('path', '/var/log/icingaweb2/audit.json'), 'a'); + $file->fwrite($json . PHP_EOL); + $file->fflush(); + } + } +} |