aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Console/TimestampFormatter.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Console/TimestampFormatter.php')
-rw-r--r--lib/private/Console/TimestampFormatter.php105
1 files changed, 105 insertions, 0 deletions
diff --git a/lib/private/Console/TimestampFormatter.php b/lib/private/Console/TimestampFormatter.php
new file mode 100644
index 00000000000..e8d9eef6b16
--- /dev/null
+++ b/lib/private/Console/TimestampFormatter.php
@@ -0,0 +1,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(bool $decorated) {
+ $this->formatter->setDecorated($decorated);
+ }
+
+ /**
+ * Gets the decorated flag.
+ *
+ * @return bool true if the output will decorate messages, false otherwise
+ */
+ public function isDecorated(): bool {
+ return $this->formatter->isDecorated();
+ }
+
+ /**
+ * Sets a new style.
+ *
+ * @param string $name The style name
+ * @param OutputFormatterStyleInterface $style The style instance
+ */
+ public function setStyle(string $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(string $name): bool {
+ 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(string $name): OutputFormatterStyleInterface {
+ 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);
+ }
+}