ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilLoggerFactory.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once './libs/composer/vendor/autoload.php';
5include_once './Services/Logging/classes/public/class.ilLogLevel.php';
6
14
27{
28 const DEFAULT_FORMAT = "[%suid%] [%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
29
30 const ROOT_LOGGER = 'root';
31 const COMPONENT_ROOT = 'log_root';
32 const SETUP_LOGGER = 'setup';
33
34 private static $instance = null;
35
36 private $settings = null;
37
38 private $enabled = false;
39 private $loggers = array();
40
42 {
43 $this->settings = $settings;
44 $this->enabled = $this->getSettings()->isEnabled();
45 }
46
51 public static function getInstance()
52 {
53 if (!static::$instance) {
54 include_once './Services/Logging/classes/class.ilLoggingDBSettings.php';
56 static::$instance = new ilLoggerFactory($settings);
57 }
58 return static::$instance;
59 }
60
66 public static function newInstance(ilLoggingSettings $settings)
67 {
68 return static::$instance = new self($settings);
69 }
70
71
79 public static function getLogger($a_component_id)
80 {
82 return $factory->getComponentLogger($a_component_id);
83 }
84
89 public static function getRootLogger()
90 {
92 return $factory->getComponentLogger(self::ROOT_LOGGER);
93 }
94
95
101 public function initUser($a_login)
102 {
103 if (!$this->getSettings()->isBrowserLogEnabledForUser($a_login)) {
104 return true;
105 }
106
107 include_once("./Services/Logging/classes/extensions/class.ilLineFormatter.php");
108
109 foreach ($this->loggers as $a_component_id => $logger) {
110 if ($this->isConsoleAvailable()) {
111 $browser_handler = new BrowserConsoleHandler();
112 $browser_handler->setLevel($this->getSettings()->getLevelByComponent($a_component_id));
113 $browser_handler->setFormatter(new ilLineFormatter(static::DEFAULT_FORMAT, 'Y-m-d H:i:s.u', true, true));
114 $logger->getLogger()->pushHandler($browser_handler);
115 }
116 }
117 }
118
123 protected function isConsoleAvailable()
124 {
125 include_once './Services/Context/classes/class.ilContext.php';
127 return false;
128 }
129 if (isset($_GET["cmdMode"]) && $_GET["cmdMode"] == "asynch") {
130 return false;
131 }
132 return true;
133 }
134
139 public function getSettings()
140 {
141 return $this->settings;
142 }
143
148 protected function getLoggers()
149 {
150 return $this->loggers;
151 }
152
158 public function getComponentLogger($a_component_id)
159 {
160 if (isset($this->loggers[$a_component_id])) {
161 return $this->loggers[$a_component_id];
162 }
163 $loggerNamePrefix = '';
164 if (defined('CLIENT_ID')) {
165 $loggerNamePrefix = CLIENT_ID . '_';
166 }
167
168 switch ($a_component_id) {
169 case 'root':
170 $logger = new Logger($loggerNamePrefix . 'root');
171 break;
172
173 default:
174 $logger = new Logger($loggerNamePrefix . $a_component_id);
175 break;
176
177 }
178
179 if (!$this->getSettings()->isEnabled()) {
180 $null_handler = new NullHandler();
181 $logger->pushHandler($null_handler);
182
183 include_once './Services/Logging/classes/class.ilComponentLogger.php';
184 return $this->loggers[$a_component_id] = new ilComponentLogger($logger);
185 }
186
187
188 // standard stream handler
189 $stream_handler = new StreamHandler(
190 $this->getSettings()->getLogDir() . '/' . $this->getSettings()->getLogFile(),
191 true
192 );
193
194 if ($a_component_id == self::ROOT_LOGGER) {
195 $stream_handler->setLevel($this->getSettings()->getLevelByComponent(self::COMPONENT_ROOT));
196 } else {
197 $stream_handler->setLevel($this->getSettings()->getLevelByComponent($a_component_id));
198 }
199
200 // format lines
201 include_once("./Services/Logging/classes/extensions/class.ilLineFormatter.php");
202 $line_formatter = new ilLineFormatter(static::DEFAULT_FORMAT, 'Y-m-d H:i:s.u', true, true);
203 $stream_handler->setFormatter($line_formatter);
204
205 if ($this->getSettings()->isCacheEnabled()) {
206 // add new finger crossed handler
207 $finger_crossed_handler = new FingersCrossedHandler(
208 $stream_handler,
209 new ErrorLevelActivationStrategy($this->getSettings()->getCacheLevel()),
210 1000
211 );
212 $logger->pushHandler($finger_crossed_handler);
213 } else {
214 $logger->pushHandler($stream_handler);
215 }
216
217 if ($GLOBALS['ilUser'] instanceof ilObjUser) {
218 if ($this->getSettings()->isBrowserLogEnabledForUser($GLOBALS['ilUser']->getLogin())) {
219 if ($this->isConsoleAvailable()) {
220 $browser_handler = new BrowserConsoleHandler();
221 #$browser_handler->setLevel($this->getSettings()->getLevelByComponent($a_component_id));
222 $browser_handler->setLevel($this->getSettings()->getLevel());
223 $browser_handler->setFormatter($line_formatter);
224 $logger->pushHandler($browser_handler);
225 }
226 }
227 }
228
229
230 // suid log
231 $logger->pushProcessor(function ($record) {
232 $record['suid'] = substr(session_id(), 0, 5);
233 return $record;
234 });
235
236 // append trace
237 include_once './Services/Logging/classes/extensions/class.ilTraceProcessor.php';
238 $logger->pushProcessor(new ilTraceProcessor(ilLogLevel::DEBUG));
239
240
241 // register new logger
242 include_once './Services/Logging/classes/class.ilComponentLogger.php';
243 $this->loggers[$a_component_id] = new ilComponentLogger($logger);
244
245 return $this->loggers[$a_component_id];
246 }
247}
$factory
Definition: metadata.php:47
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
Formats incoming records into a one-line string.
Handler sending logs to browser's javascript console with no browser extension required.
Buffers all records until a certain level is reached.
Stores to any stream resource.
Monolog log channel.
Definition: Logger.php:28
Component logger with individual log levels by component id.
const CONTEXT_WEB
static getType()
Get context type.
Custom line formatter.
static newInstance(ilLoggingSettings $settings)
get new instance
getSettings()
Get settigns.
static getRootLogger()
The unique root logger has a fixed error level.
isConsoleAvailable()
Check if console handler is available.
static getLogger($a_component_id)
Get component logger.
initUser($a_login)
Init user specific log options.
getComponentLogger($a_component_id)
Get component logger.
__construct(ilLoggingSettings $settings)
static getInstance()
Get instance.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
settings()
Definition: settings.php:2