ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLog.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 
18 class ilLog
19 {
20 
26  public $path;
27  public $filename;
28  public $tag;
29  public $log_format;
30 
36  public $FATAL;
37 
43  public $WARNING;
44 
50  public $MESSAGE;
51 
52  public $fp = false;
53 
64  public function __construct($a_log_path, $a_log_file, $a_tag = "", $a_enabled = true, $a_log_level = null)
65  {
66  // init vars
67  include_once './Services/Logging/classes/public/class.ilLogLevel.php';
68 
69  $this->FATAL = ilLogLevel::CRITICAL;
70  $this->WARNING = ilLogLevel::WARNING;
71  $this->MESSAGE = ilLogLevel::INFO;
72 
73  $this->default_log_level = $this->WARNING;
74  $this->current_log_level = $this->setLogLevel($a_log_level);
75 
76  $this->path = ($a_log_path) ? $a_log_path : ILIAS_ABSOLUTE_PATH;
77  $this->filename = ($a_log_file) ? $a_log_file : "ilias.log";
78  $this->tag = ($a_tag == "") ? "unknown" : $a_tag;
79  $this->enabled = (bool) $a_enabled;
80 
81  $this->setLogFormat(@date("[y-m-d H:i:s] ") . "[" . $this->tag . "] ");
82 
83  $this->open();
84  }
85 
93  public function setLogLevel($a_log_level)
94  {
95  switch (strtolower($a_log_level)) {
96  case "fatal":
97  return $this->FATAL;
98  case "warning":
99  return $this->WARNING;
100  case "message":
101  return $this->MESSAGE;
102  default:
103  return $this->default_log_level;
104  }
105  }
106 
114  public function checkLogLevel($a_log_level)
115  {
116  if (empty($a_log_level)) {
117  return $this->default_log_level;
118  }
119 
120  $level = (int) $a_log_level;
121 
122  if ($a_log_level != (int) $a_log_level) {
123  return $this->default_log_level;
124  }
125 
126  return $level;
127  }
128 
129  public function setLogFormat($a_format)
130  {
131  $this->log_format = $a_format;
132  }
133 
134  public function getLogFormat()
135  {
136  return $this->log_format;
137  }
138 
139  public function setPath($a_str)
140  {
141  $this->path = $a_str;
142 
143  // on filename change reload close current file
144  if ($this->fp) {
145  fclose($this->fp);
146  $this->fp = null;
147  }
148  }
149 
150  public function setFilename($a_str)
151  {
152  $this->filename = $a_str;
153 
154  // on filename change reload close current file
155  if ($this->fp) {
156  fclose($this->fp);
157  $this->fp = null;
158  }
159  }
160 
161  public function setTag($a_str)
162  {
163  $this->tag = $a_str;
164  }
165 
175  public function writeLanguageLog($a_topic, $a_lang_key)
176  {
177  //TODO: go through logfile and search for the topic
178  //only write the log if the error wasn't reported yet
179  $this->write("Language (" . $a_lang_key . "): topic -" . $a_topic . "- not present", $this->MESSAGE);
180  }
181 
188  public function writeWarning($a_message)
189  {
190  $this->write("WARNING: " . $a_message);
191  }
192 
201  public function logError($a_code, $a_msg)
202  {
203  switch ($a_code) {
204  case "3":
205  return; // don't log messages
206  $error_level = "message";
207  break;
208 
209  case "2":
210  $error_level = "warning";
211  break;
212 
213  case "1":
214  $error_level = "fatal";
215  break;
216 
217  default:
218  $error_level = "unknown";
219  break;
220  }
221 
222  $this->write("ERROR (" . $error_level . "): " . $a_msg);
223  }
224 
239  public function write($a_msg, $a_log_level = null)
240  {
241  if ($this->enabled and $this->current_log_level >= $this->checkLogLevel($a_log_level)) {
242  $this->open();
243 
244  if ($this->fp == false) {
245  //die("Logfile: cannot open file. Please give Logfile Writepermissions.");
246  }
247 
248  if (fwrite($this->fp, $this->getLogFormat() . $a_msg . "\n") == -1) {
249  //die("Logfile: cannot write to file. Please give Logfile Writepermissions.");
250  }
251 
252  // note: logStack() calls write() again, so do not make this call
253  // if no log level is given
254  if ($a_log_level == $this->FATAL) {
255  $this->logStack();
256  }
257  }
258  }
259 
260  public function logStack($a_message = '')
261  {
262  try {
263  throw new Exception($a_message);
264  } catch (Exception $e) {
265  $this->write($e->getTraceAsString());
266  }
267  }
268 
275  public function dump($a_var, $a_log_level = null)
276  {
277  $this->write(print_r($a_var, true), $a_log_level);
278  }
279 
284  private function open()
285  {
286  if (!$this->fp) {
287  $this->fp = @fopen($this->path . "/" . $this->filename, "a");
288  }
289 
290  if (!$this->fp && $this->enabled) {
291  include_once("./Services/Logging/exceptions/class.ilLogException.php");
292  throw new ilLogException('Unable to open log file for writing. Please check setup path to log file and possible write access.');
293  }
294  }
295 
296  public function __destruct()
297  {
298  @fclose($this->fp);
299  }
300 
301 
302 
306  public function delete()
307  {
308  if (@is_file($this->path . "/" . $this->filename)) {
309  @unlink($this->path . "/" . $this->filename);
310  }
311  }
312 } // END class.ilLog
writeLanguageLog($a_topic, $a_lang_key)
special language checking routine
__destruct()
setLogFormat($a_format)
getLogFormat()
ILIAS Log exception class.
dump($a_var, $a_log_level=null)
Dump a variable to the log.
open()
Open log file.
logging
Definition: class.ilLog.php:18
write($a_msg, $a_log_level=null)
logging
checkLogLevel($a_log_level)
determine log level
setLogLevel($a_log_level)
set global log level
Definition: class.ilLog.php:93
logStack($a_message='')
logError($a_code, $a_msg)
this function is automatically called by class.ilErrorHandler in case of an error To log manually ple...
setFilename($a_str)
setPath($a_str)
__construct($a_log_path, $a_log_file, $a_tag="", $a_enabled=true, $a_log_level=null)
constructor
Definition: class.ilLog.php:64
setTag($a_str)
writeWarning($a_message)
special warning message