ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
TestLogger.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Test\Logging;
22
23use Psr\Log\LoggerInterface;
24
26
27class TestLogger implements LoggerInterface
28{
29 private const LOG_ENTRY_TYPES = [
30 TestAdministrationInteraction::IDENTIFIER => TestAdministrationInteractionTypes::class,
31 TestQuestionAdministrationInteraction::IDENTIFIER => TestQuestionAdministrationInteractionTypes::class,
32 TestParticipantInteraction::IDENTIFIER => TestParticipantInteractionTypes::class,
33 TestScoringInteraction::IDENTIFIER => TestScoringInteractionTypes::class,
34 TestError::IDENTIFIER => TestErrorTypes::class
35 ];
36 public function __construct(
37 private readonly TestLoggingSettings $logging_settings,
38 private readonly TestLoggingRepository $logging_repository,
39 private readonly Factory $interaction_factory,
40 private readonly AdditionalInformationGenerator $additional_information,
41 private readonly \ilComponentLogger $component_logger,
42 ) {
43 }
44
45 public function isLoggingEnabled(): bool
46 {
47 return $this->logging_settings->isLoggingEnabled();
48 }
49
50 public function isIPLoggingEnabled(): bool
51 {
52 return $this->logging_settings->isIPLoggingEnabled();
53 }
54
55 public function testHasParticipantInteractions(int $ref_id): bool
56 {
57 return $this->logging_repository->testHasParticipantInteractions($ref_id);
58 }
59
61 {
62 $this->logging_repository->deleteParticipantInteractionsForTest($ref_id);
63 }
64
66 {
67 $this->logging_repository->storeTestAdministrationInteraction($interaction);
68 }
69
71 {
72 $this->logging_repository->storeQuestionAdministrationInteraction($interaction);
73 }
74
75 public function logParticipantInteraction(TestParticipantInteraction $interaction): void
76 {
77 $this->logging_repository->storeParticipantInteraction($interaction);
78 }
79
80 public function logScoringInteraction(TestScoringInteraction $interaction): void
81 {
82 $this->logging_repository->storeScoringInteraction($interaction);
83 }
84
85 public function emergency(string|\Stringable $message, array $context = []): void
86 {
87 $this->component_logger->emergency($message, $context);
88
89 if (!$this->logging_settings->isLoggingEnabled()
90 || !isset($context['ref_id'])) {
91 return;
92 }
93
94 $this->logging_repository->storeError(
95 $this->createTestErrorFromContext($context, $message)
96 );
97 }
98 public function alert(string|\Stringable $message, array $context = []): void
99 {
100 $this->component_logger->alert($message, $context);
101
102 if (!$this->logging_settings->isLoggingEnabled()
103 || !isset($context['ref_id'])) {
104 return;
105 }
106
107 $this->logging_repository->storeError(
108 $this->createTestErrorFromContext($context, $message)
109 );
110 }
111
112 public function critical(string|\Stringable $message, array $context = []): void
113 {
114 $this->component_logger->critical($message, $context);
115
116 if (!$this->logging_settings->isLoggingEnabled()
117 || !isset($context['ref_id'])) {
118 return;
119 }
120
121 $this->logging_repository->storeError(
122 $this->createTestErrorFromContext($context, $message)
123 );
124 }
125 public function error(string|\Stringable $message, array $context = []): void
126 {
127
128 if (!$this->logging_settings->isLoggingEnabled()
129 || !isset($context['ref_id'])) {
130 return;
131 }
132
133 $this->logging_repository->storeError(
134 $this->createTestErrorFromContext($context, $message)
135 );
136 $this->component_logger->error($message, $context);
137 }
138
139 public function warning(string|\Stringable $message, array $context = []): void
140 {
141 $this->component_logger->warning($message, $context);
142 }
143
144 public function notice(string|\Stringable $message, array $context = []): void
145 {
146 $this->component_logger->notice($message, $context);
147 }
148
149 public function info(string|\Stringable $message, array $context = []): void
150 {
151 $this->component_logger->info($message, $context);
152 }
153
154 public function debug(string|\Stringable $message, array $context = []): void
155 {
156 $this->component_logger->debug($message, $context);
157 }
158
159 public function log($level, string|\Stringable $message, mixed $context = []): void
160 {
161 $this->component_logger->log($message, $level, $context);
162
163 if (!$this->logging_settings->isLoggingEnabled()
164 || intval($level) < \ilLogLevel::ERROR
165 || !isset($context['ref_id'])) {
166 return;
167 }
168
169 $this->logging_repository->storeError(
170 $this->createTestErrorFromContext($context, $message)
171 );
172 }
173
175 {
176 return $this->component_logger;
177 }
178
180 {
181 return $this->interaction_factory;
182 }
183
185 {
186 return $this->additional_information;
187 }
188
192 public function getLogEntryTypes(): array
193 {
194 return array_keys(self::LOG_ENTRY_TYPES);
195 }
196
197 public function getInteractionTypes(): array
198 {
199 $interaction_types = [];
200 foreach (self::LOG_ENTRY_TYPES as $type => $enum_class) {
201 $interaction_types[$type] = array_column($enum_class::cases(), 'value');
202 }
203 return $interaction_types;
204 }
205
206 private function createTestErrorFromContext(array $context, string $message): TestError
207 {
208 return new TestError(
209 $context['ref_id'],
210 $context ['question_id'] ?? null,
211 $context['administrator'] ?? null,
212 $context['participant'] ?? null,
214 $context['timestamp'] ?? time(),
216 );
217 }
218}
log($level, string|\Stringable $message, mixed $context=[])
Definition: TestLogger.php:159
deleteParticipantInteractionsForTest(int $ref_id)
Definition: TestLogger.php:60
logQuestionAdministrationInteraction(TestQuestionAdministrationInteraction $interaction)
Definition: TestLogger.php:70
testHasParticipantInteractions(int $ref_id)
Definition: TestLogger.php:55
critical(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:112
logParticipantInteraction(TestParticipantInteraction $interaction)
Definition: TestLogger.php:75
logScoringInteraction(TestScoringInteraction $interaction)
Definition: TestLogger.php:80
warning(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:139
notice(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:144
error(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:125
logTestAdministrationInteraction(TestAdministrationInteraction $interaction)
Definition: TestLogger.php:65
createTestErrorFromContext(array $context, string $message)
Definition: TestLogger.php:206
__construct(private readonly TestLoggingSettings $logging_settings, private readonly TestLoggingRepository $logging_repository, private readonly Factory $interaction_factory, private readonly AdditionalInformationGenerator $additional_information, private readonly \ilComponentLogger $component_logger,)
Definition: TestLogger.php:36
info(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:149
debug(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:154
alert(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:98
emergency(string|\Stringable $message, array $context=[])
Definition: TestLogger.php:85
Component logger with individual log levels by component id.
$ref_id
Definition: ltiauth.php:66
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$context
Definition: webdav.php:31
$message
Definition: xapiexit.php:31