Elgg  Version 6.3
Cron.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Elgg\Logger;
4 
8 use Monolog\Handler\StreamHandler;
9 use Monolog\Processor\MemoryPeakUsageProcessor;
10 use Monolog\Processor\MemoryUsageProcessor;
11 use Monolog\Processor\ProcessIdProcessor;
12 use Monolog\Processor\PsrLogMessageProcessor;
13 use Monolog\Processor\TagProcessor;
14 
20 class Cron extends \Monolog\Logger {
21 
22  protected const CHANNEL = 'CRON';
23 
32  public static function factory(array $params = []): static {
33  $interval = elgg_extract('interval', $params);
34  $cron = _elgg_services()->cron;
35  if (empty($interval) || !in_array($interval, $cron->getConfiguredIntervals(true))) {
36  throw new InvalidArgumentException('Please specify a valid cron interval');
37  }
38 
39  $filename = elgg_extract('filename', $params);
40  if (empty($filename)) {
41  throw new InvalidArgumentException('Please provide a log filename');
42  }
43 
44  $logger = new static(self::CHANNEL);
45 
46  // default file output handler
47  $handler = new StreamHandler($filename);
48 
49  $formatter = new ElggLogFormatter();
50  $formatter->allowInlineLineBreaks();
51  $formatter->ignoreEmptyContextAndExtra();
52 
53  $handler->setFormatter($formatter);
54 
55  $handler->pushProcessor(new MemoryUsageProcessor());
56  $handler->pushProcessor(new MemoryPeakUsageProcessor());
57  $handler->pushProcessor(new ProcessIdProcessor());
58  $handler->pushProcessor(new TagProcessor([$interval]));
59  $handler->pushProcessor(new PsrLogMessageProcessor());
60 
61  $logger->pushHandler($handler);
62 
63  // in cli add handler to log to stdout
64  if (Application::isCli() && !_elgg_services()->config->testing_mode) {
65  $cli_output = new CronLogHandler();
66 
67  $cli_output->pushProcessor(new MemoryUsageProcessor());
68  $cli_output->pushProcessor(new MemoryPeakUsageProcessor());
69  $cli_output->pushProcessor(new ProcessIdProcessor());
70  $cli_output->pushProcessor(new TagProcessor([$interval]));
71  $cli_output->pushProcessor(new PsrLogMessageProcessor());
72 
73  $logger->pushHandler($cli_output);
74  }
75 
76  return $logger;
77  }
78 }
$params
Saves global plugin settings.
Definition: save.php:13
$handler
Definition: add.php:7
static isCli()
Is application running in CLI.
Additional output handler for the \Elgg\Logger\Cron which outputs to the stdout.
Exception thrown if an argument is not of the expected type.
Custom logger for an individual cron interval.
Definition: Cron.php:20
static factory(array $params=[])
Definition: Cron.php:32
const CHANNEL
Definition: Cron.php:22
_elgg_services()
Get the global service provider.
Definition: elgglib.php:337
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:240