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 
4 include_once './libs/composer/vendor/autoload.php';
5 include_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  {
81  $factory = self::getInstance();
82  return $factory->getComponentLogger($a_component_id);
83  }
84 
89  public static function getRootLogger()
90  {
91  $factory = self::getInstance();
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 }
Buffers all records until a certain level is reached.
getSettings()
Get settigns.
$_GET["client_id"]
static newInstance(ilLoggingSettings $settings)
get new instance
Monolog log channel.
Definition: Logger.php:27
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
$factory
Definition: metadata.php:47
Component logger with individual log levels by component id.
initUser($a_login)
Init user specific log options.
Handler sending logs to browser&#39;s javascript console with no browser extension required.
isConsoleAvailable()
Check if console handler is available.
Logging factory.
getComponentLogger($a_component_id)
Get component logger.
Create styles array
The data for the language used.
static getInstance()
Get instance.
settings()
Definition: settings.php:2
Custom line formatter.
Stores to any stream resource.
const CONTEXT_WEB
static getLogger($a_component_id)
Get component logger.
__construct(ilLoggingSettings $settings)
static getType()
Get context type.
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
static getRootLogger()
The unique root logger has a fixed error level.