blob: de0675cc5dfbc854db047d0a8a4836050c6c8004 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
<?php
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OC\Console;
use OCP\IConfig;
use Symfony\Component\Console\Formatter\OutputFormatterInterface;
use Symfony\Component\Console\Formatter\OutputFormatterStyleInterface;
class TimestampFormatter implements OutputFormatterInterface {
/** @var ?IConfig */
protected $config;
/** @var OutputFormatterInterface */
protected $formatter;
/**
* @param ?IConfig $config
* @param OutputFormatterInterface $formatter
*/
public function __construct(?IConfig $config, OutputFormatterInterface $formatter) {
$this->config = $config;
$this->formatter = $formatter;
}
/**
* Sets the decorated flag.
*
* @param bool $decorated Whether to decorate the messages or not
*/
public function setDecorated($decorated) {
$this->formatter->setDecorated($decorated);
}
/**
* Gets the decorated flag.
*
* @return bool true if the output will decorate messages, false otherwise
*/
public function isDecorated() {
return $this->formatter->isDecorated();
}
/**
* Sets a new style.
*
* @param string $name The style name
* @param OutputFormatterStyleInterface $style The style instance
*/
public function setStyle($name, OutputFormatterStyleInterface $style) {
$this->formatter->setStyle($name, $style);
}
/**
* Checks if output formatter has style with specified name.
*
* @param string $name
* @return bool
*/
public function hasStyle($name) {
return $this->formatter->hasStyle($name);
}
/**
* Gets style options from style with specified name.
*
* @param string $name
* @return OutputFormatterStyleInterface
* @throws \InvalidArgumentException When style isn't defined
*/
public function getStyle($name) {
return $this->formatter->getStyle($name);
}
/**
* Formats a message according to the given styles.
*
* @param string|null $message The message to style
* @return string|null The styled message, prepended with a timestamp using the
* log timezone and dateformat, e.g. "2015-06-23T17:24:37+02:00"
*/
public function format(?string $message): ?string {
if (!$this->formatter->isDecorated()) {
// Don't add anything to the output when we shouldn't
return $this->formatter->format($message);
}
if ($this->config instanceof IConfig) {
$timeZone = $this->config->getSystemValue('logtimezone', 'UTC');
$timeZone = $timeZone !== null ? new \DateTimeZone($timeZone) : null;
$time = new \DateTime('now', $timeZone);
$timestampInfo = $time->format($this->config->getSystemValue('logdateformat', \DateTimeInterface::ATOM));
} else {
$time = new \DateTime('now');
$timestampInfo = $time->format(\DateTimeInterface::ATOM);
}
return $timestampInfo . ' ' . $this->formatter->format($message);
}
}
|