1*244ef61dSIain Hallam<?php 2*244ef61dSIain Hallam 3*244ef61dSIain Hallam/** 4*244ef61dSIain Hallam * DokuWiki Plugin combinedlogs (Action Component) 5*244ef61dSIain Hallam * 6*244ef61dSIain Hallam * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 7*244ef61dSIain Hallam * @author Iain Hallam <first.last@example.com> 8*244ef61dSIain Hallam */ 9*244ef61dSIain Hallam 10*244ef61dSIain Hallamuse dokuwiki\Extension\ActionPlugin; 11*244ef61dSIain Hallamuse dokuwiki\Extension\EventHandler; 12*244ef61dSIain Hallamuse dokuwiki\Extension\Event; 13*244ef61dSIain Hallamuse dokuwiki\Logger; 14*244ef61dSIain Hallam 15*244ef61dSIain Hallam// phpcs:disable PSR1.Classes.ClassDeclaration -- DokuWiki plugins must not be in a namespace 16*244ef61dSIain Hallam// phpcs:disable Squiz.Classes.ValidClassName -- DokuWiki requires snake case class names 17*244ef61dSIain Hallamclass action_plugin_combinedlogs extends ActionPlugin 18*244ef61dSIain Hallam{ 19*244ef61dSIain Hallam private Logger $logger; 20*244ef61dSIain Hallam 21*244ef61dSIain Hallam public function __construct() 22*244ef61dSIain Hallam { 23*244ef61dSIain Hallam $this->logger = Logger::getInstance($this->getConf('facility')); 24*244ef61dSIain Hallam } 25*244ef61dSIain Hallam 26*244ef61dSIain Hallam /** @inheritDoc */ 27*244ef61dSIain Hallam public function register(EventHandler $controller) 28*244ef61dSIain Hallam { 29*244ef61dSIain Hallam $controller->register_hook('LOGGER_DATA_FORMAT', 'AFTER', $this, 'handleLoggerDataFormat'); 30*244ef61dSIain Hallam } 31*244ef61dSIain Hallam 32*244ef61dSIain Hallam /** 33*244ef61dSIain Hallam * Event handler for LOGGER_DATA_FORMAT 34*244ef61dSIain Hallam * 35*244ef61dSIain Hallam * @see https://www.dokuwiki.org/devel:events:LOGGER_DATA_FORMAT 36*244ef61dSIain Hallam * @param Event $event Event object by reference 37*244ef61dSIain Hallam * @param mixed $param optional parameter passed when event was registered 38*244ef61dSIain Hallam * @return void 39*244ef61dSIain Hallam */ 40*244ef61dSIain Hallam public function handleLoggerDataFormat(Event $event) 41*244ef61dSIain Hallam { 42*244ef61dSIain Hallam global $conf; 43*244ef61dSIain Hallam 44*244ef61dSIain Hallam // Work out the file name 45*244ef61dSIain Hallam if ($this->getConf('by_date') == 1) { 46*244ef61dSIain Hallam $event->data['logfile'] = $this->logger->getLogFile($event->data['datetime']); 47*244ef61dSIain Hallam } else { 48*244ef61dSIain Hallam $event->data['logfile'] = $conf['logdir'] . '/' . $this->getConf('facility') . '.log'; 49*244ef61dSIain Hallam } 50*244ef61dSIain Hallam 51*244ef61dSIain Hallam // Modify the first log line to include the facility name 52*244ef61dSIain Hallam $event->data['loglines'][0] = preg_replace( 53*244ef61dSIain Hallam '/^([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})\t/', // YYYY-MM-DD HH:MM:SS 54*244ef61dSIain Hallam "$1\t" . strtoupper($event->data['facility']) . "\t", 55*244ef61dSIain Hallam $event->data['loglines'][0] 56*244ef61dSIain Hallam ); 57*244ef61dSIain Hallam } 58*244ef61dSIain Hallam} 59