]> git.mxchange.org Git - friendica.git/blob - src/Util/LoggerFactory.php
remove file added by mistake
[friendica.git] / src / Util / LoggerFactory.php
1 <?php
2
3 namespace Friendica\Util;
4
5 use Friendica\Network\HTTPException\InternalServerErrorException;
6 use Friendica\Util\Logger\FriendicaDevelopHandler;
7 use Monolog;
8 use Psr\Log\LoggerInterface;
9 use Psr\Log\LogLevel;
10
11 /**
12  * A logger factory
13  *
14  * Currently only Monolog is supported
15  */
16 class LoggerFactory
17 {
18         /**
19          * Creates a new PSR-3 compliant logger instances
20          *
21          * @param string $channel The channel of the logger instance
22          *
23          * @return LoggerInterface The PSR-3 compliant logger instance
24          */
25         public static function create($channel)
26         {
27                 $logger = new Monolog\Logger($channel);
28                 $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
29                 $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
30
31                 // Add more information in case of a warning and more
32                 $logger->pushProcessor(new Monolog\Processor\IntrospectionProcessor(LogLevel::WARNING, [], 1));
33
34                 return $logger;
35         }
36
37         /**
38          * Creates a new PSR-3 compliant develop logger
39          *
40          * If you want to debug only interactions from your IP or the IP of a remote server for federation debug,
41          * you'll use this logger instance for the duration of your work.
42          *
43          * It should never get filled during normal usage of Friendica
44          *
45          * @param string $channel      The channel of the logger instance
46          * @param string $developerIp  The IP of the developer who wants to use the logger
47          *
48          * @return LoggerInterface The PSR-3 compliant logger instance
49          */
50         public static function createDev($channel, $developerIp)
51         {
52                 $logger = new Monolog\Logger($channel);
53                 $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
54                 $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
55
56                 $logger->pushProcessor(new Monolog\Processor\IntrospectionProcessor(Loglevel::DEBUG, [], 1));
57
58                 $logger->pushHandler(new FriendicaDevelopHandler($developerIp));
59
60                 return $logger;
61         }
62
63         /**
64          * Adding a handler to a given logger instance
65          *
66          * @param LoggerInterface $logger  The logger instance
67          * @param mixed           $stream  The stream which handles the logger output
68          * @param string          $level   The level, for which this handler at least should handle logging
69          *
70          * @return void
71          *
72          * @throws InternalServerErrorException if the logger is incompatible to the logger factory
73          * @throws \Exception in case of general failures
74          */
75         public static function addStreamHandler($logger, $stream, $level = LogLevel::NOTICE)
76         {
77                 if ($logger instanceof Monolog\Logger) {
78                         $fileHandler = new Monolog\Handler\StreamHandler($stream, Monolog\Logger::toMonologLevel($level));
79
80                         $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
81                         $fileHandler->setFormatter($formatter);
82
83                         $logger->pushHandler($fileHandler);
84                 } else {
85                         throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
86                 }
87         }
88
89         /**
90          * This method enables the test mode of a given logger
91          *
92          * @param LoggerInterface $logger The logger
93          *
94          * @return Monolog\Handler\TestHandler the Handling for tests
95          *
96          * @throws InternalServerErrorException if the logger is incompatible to the logger factory
97          */
98         public static function enableTest($logger)
99         {
100                 if ($logger instanceof Monolog\Logger) {
101                         // disable every handler so far
102                         $logger->pushHandler(new Monolog\Handler\NullHandler());
103
104                         // enable the test handler
105                         $fileHandler = new Monolog\Handler\TestHandler();
106                         $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
107                         $fileHandler->setFormatter($formatter);
108
109                         $logger->pushHandler($fileHandler);
110
111                         return $fileHandler;
112                 } else {
113                         throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
114                 }
115         }
116 }