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