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