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