]> git.mxchange.org Git - friendica.git/blob - src/Core/Logger.php
ad814042db5427553303895e957b9f9f4cdc451c
[friendica.git] / src / Core / Logger.php
1 <?php
2 /**
3  * @file src/Core/Logger.php
4  */
5 namespace Friendica\Core;
6
7 use Friendica\Core\Config;
8 use Friendica\Util\DateTimeFormat;
9
10 /**
11  * @brief Logger functions
12  */
13 class Logger extends BaseObject
14 {
15     // Log levels:
16     const WARNING = 0;
17     const INFO = 1;
18     const TRACE = 2;
19     const DEBUG = 3;
20     const DATA = 4;
21     const ALL = 5;
22
23     public static $levels = [];
24
25     /**
26      * @brief Get class constants, and avoid using substring.
27      */
28     public function getConstants()
29     {
30         $reflectionClass = new ReflectionClass($this);
31         return $reflectionClass->getConstants();
32     }
33
34     /**
35      * @brief Logs the given message at the given log level
36      *
37      * @param string $msg
38      * @param int $level
39      */
40     public static function log($msg, $level = INFO)
41     {
42         $a = self::getApp();
43
44         $debugging = Config::get('system', 'debugging');
45         $logfile   = Config::get('system', 'logfile');
46         $loglevel = intval(Config::get('system', 'loglevel'));
47
48         if (
49             !$debugging
50             || !$logfile
51             || $level > $loglevel
52         ) {
53             return;
54         }
55
56         if (count($levels) == 0)
57         {
58             foreach (self::getConstants() as $k => $v)
59             {
60                 $levels[$v] = $k;
61             }
62         }
63
64         $processId = session_id();
65
66         if ($processId == '')
67         {
68             $processId = $a->process_id;
69         }
70
71         $callers = debug_backtrace();
72
73         if (count($callers) > 1) {
74             $function = $callers[1]['function'];
75         } else {
76             $function = '';
77         }
78
79         $logline = sprintf("%s@%s\t[%s]:%s:%s:%s\t%s\n",
80                 DateTimeFormat::utcNow(DateTimeFormat::ATOM),
81                 $processId,
82                 $levels[$level],
83                 basename($callers[0]['file']),
84                 $callers[0]['line'],
85                 $function,
86                 $msg
87             );
88
89         $stamp1 = microtime(true);
90         @file_put_contents($logfile, $logline, FILE_APPEND);
91         $a->saveTimestamp($stamp1, "file");
92     }
93
94     /**
95      * @brief An alternative logger for development.
96      * Works largely as log() but allows developers
97      * to isolate particular elements they are targetting
98      * personally without background noise
99      *
100      * @param string $msg
101      * @param int $level
102      */
103     public static function devLog($msg, $level = INFO)
104     {
105         $a = self::getApp();
106
107         $logfile = Config::get('system', 'dlogfile');
108
109         if (!$logfile) {
110             return;
111         }
112
113         $dlogip = Config::get('system', 'dlogip');
114
115         if (!is_null($dlogip) && $_SERVER['REMOTE_ADDR'] != $dlogip)
116         {
117             return;
118         }
119
120         if (count($levels) == 0)
121         {
122             foreach (self::getConstants() as $k => $v)
123             {
124                 $levels[$v] = $k;
125             }
126         }
127
128         $processId = session_id();
129
130         if ($processId == '')
131         {
132             $processId = $a->process_id;
133         }
134
135         $callers = debug_backtrace();
136         $logline = sprintf("%s@\t%s:\t%s:\t%s\t%s\t%s\n",
137                 DateTimeFormat::utcNow(),
138                 $processId,
139                 basename($callers[0]['file']),
140                 $callers[0]['line'],
141                 $callers[1]['function'],
142                 $msg
143             );
144
145         $stamp1 = microtime(true);
146         @file_put_contents($logfile, $logline, FILE_APPEND);
147         $a->saveTimestamp($stamp1, "file");
148     }
149 }