]> git.mxchange.org Git - friendica-addons.git/blob - monolog/monolog.php
[various] Remove App dependency from hook functions
[friendica-addons.git] / monolog / monolog.php
1 <?php
2 /*
3  * Name: Monolog
4  * Description: A Logging framework with lots of additions (see [Monolog](https://github.com/Seldaek/monolog/)). There are just Friendica additions inside the src directory
5  * Version: 1.0
6  * Author: Philipp Holzer
7  */
8
9 use Friendica\App;
10 use Friendica\Core\Hook;
11 use Friendica\Addon\monolog\src\IntrospectionProcessor;
12 use Friendica\DI;
13 use Psr\Log\LogLevel;
14
15 require_once __DIR__ . '/vendor/autoload.php';
16
17 function monolog_install()
18 {
19         Hook::register('logger_instance' , __FILE__, 'monolog_instance');
20 }
21
22 function monolog_uninstall()
23 {
24         Hook::unregister('logger_instance', __FILE__, 'monolog_instance');
25 }
26
27 function monolog_instance(array &$data)
28 {
29         if ($data['name'] !== 'monolog') {
30                 return;
31         }
32
33         $loggerTimeZone = new \DateTimeZone('UTC');
34
35         $logger = new Monolog\Logger($data['channel']);
36         $logger->setTimezone($loggerTimeZone);
37         $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
38         $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
39         $logger->pushProcessor(new Monolog\Processor\UidProcessor());
40         $logger->pushProcessor(new IntrospectionProcessor($data['introspection'], LogLevel::DEBUG));
41
42         $stream = DI::config()->get('system', 'logfile');
43
44         // just add a stream in case it's either writable or not file
45         if (!is_file($stream) || is_writable($stream)) {
46                 try {
47                         $loglevel = Monolog\Logger::toMonologLevel($data['loglevel']);
48
49                         // fallback to notice if an invalid loglevel is set
50                         if (!is_int($loglevel)) {
51                                 $loglevel = LogLevel::NOTICE;
52                         }
53
54                         $fileHandler = new Monolog\Handler\StreamHandler($stream, $loglevel);
55
56                         $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
57                         $fileHandler->setFormatter($formatter);
58
59                         $logger->pushHandler($fileHandler);
60                 } catch (\Throwable $e) {
61                         return;
62                 }
63         }
64
65         $data['storage'] = $logger;
66 }