17 private const AVAILABLE_TYPE = [
21 private const SUPPORTED_LEVEL_LIST = [
31 private const MODULE_ID =
'rest';
32 private const OPTION_LEVEL =
'logger_level';
33 private const OPTION_TYPE =
'logger_type';
34 private const OPTION_FILE_PATH =
'logger_file_path';
35 private const OPTION_LOG_FILTER =
'log_filters';
36 private const OPTION_LOG_END_TIME =
'log_end_time';
37 private const OPTION_SHOW_ARGUMENTS =
'logger_show_args';
38 private const OPTION_SHOW_ARGUMENTS_VALUE_Y =
'Y';
39 private const OPTION_SHOW_ARGUMENTS_VALUE_N =
'N';
41 private bool $isActive;
42 private string $level;
45 private bool $showArguments;
47 private ?
array $filterOptions =
null;
49 private function __construct()
52 $this->level = Option::get(self::MODULE_ID,self::OPTION_LEVEL,
'');
53 $this->type = Option::get(self::MODULE_ID,self::OPTION_TYPE, self::TYPE_FILE);
54 $this->
path = Option::get(self::MODULE_ID,self::OPTION_FILE_PATH,
'');
55 $showArguments = Option::get(self::MODULE_ID,self::OPTION_SHOW_ARGUMENTS, self::OPTION_SHOW_ARGUMENTS_VALUE_N);
56 $this->showArguments = $showArguments === self::OPTION_SHOW_ARGUMENTS_VALUE_Y;
59 private function __clone()
65 if (!isset(self::$instance))
70 return self::$instance;
75 return $this->isActive;
81 Option::delete(self::MODULE_ID, [
'name' => self::OPTION_LOG_END_TIME]);
86 return in_array($this->level, self::SUPPORTED_LEVEL_LIST,
true) ? $this->level :
'';
91 if (in_array($level, self::SUPPORTED_LEVEL_LIST,
true))
93 $this->level = $level;
94 Option::set(self::MODULE_ID,self::OPTION_LEVEL, $this->level);
104 return self::SUPPORTED_LEVEL_LIST;
107 public function setType(
string $type = self::TYPE_FILE): bool
109 if (in_array($type, self::AVAILABLE_TYPE,
true))
112 Option::set(self::MODULE_ID,self::OPTION_TYPE, $this->type);
122 return $this->type === self::TYPE_FILE ? self::TYPE_FILE : self::TYPE_DATABASE;
130 Option::set(self::MODULE_ID,self::OPTION_FILE_PATH, $this->
path);
145 if (is_null($this->logger) && $this->
isActive() && $this->
getLevel() !==
'')
147 if ($this->
getType() === self::TYPE_FILE)
161 $this->logger->setLevel($this->
getLevel());
162 $this->logger->setFormatter(
168 return $this->logger;
173 if (!is_array($this->filterOptions))
176 Option::get(self::MODULE_ID, self::OPTION_LOG_FILTER,
''),
178 'allowed_classes' =>
false
189 $this->filterOptions = $filters;
190 Option::set(self::MODULE_ID, self::OPTION_LOG_FILTER, serialize($filters));
195 return (
int)Option::get(self::MODULE_ID, self::OPTION_LOG_END_TIME, 0);
201 Option::set(self::MODULE_ID, self::OPTION_LOG_END_TIME,
$time);