11use Psr\Log\NullLogger;
12use Psr\Log\LoggerInterface;
35 "SEVERITY" => $SEVERITY,
36 "AUDIT_TYPE_ID" => $AUDIT_TYPE_ID,
37 "MODULE_ID" => $MODULE_ID,
38 "ITEM_ID" => $ITEM_ID,
48 static $arSeverity = [
49 self::SEVERITY_SECURITY => LogLevel::INFO,
50 self::SEVERITY_EMERGENCY => LogLevel::EMERGENCY,
51 self::SEVERITY_ALERT => LogLevel::ALERT,
52 self::SEVERITY_CRITICAL => LogLevel::CRITICAL,
53 self::SEVERITY_ERROR => LogLevel::ERROR,
54 self::SEVERITY_WARNING => LogLevel::WARNING,
55 self::SEVERITY_NOTICE => LogLevel::NOTICE,
56 self::SEVERITY_INFO => LogLevel::INFO,
57 self::SEVERITY_DEBUG => LogLevel::DEBUG,
60 $url = preg_replace(
"/(&?sessid=[0-9a-z]+)/",
"",
$_SERVER[
"REQUEST_URI"]);
72 $arFields[
"DESCRIPTION"] = json_encode(
$arFields[
"DESCRIPTION"], JSON_UNESCAPED_UNICODE);
76 "SEVERITY" => isset($arSeverity[
$arFields[
"SEVERITY"] ??
null]) ?
$arFields[
"SEVERITY"] :
"UNKNOWN",
77 "AUDIT_TYPE_ID" =>
$arFields[
"AUDIT_TYPE_ID"] ==
'' ?
"UNKNOWN" :
$arFields[
"AUDIT_TYPE_ID"],
80 "REMOTE_ADDR" =>
$_SERVER[
"REMOTE_ADDR"],
81 "USER_AGENT" =>
$_SERVER[
"HTTP_USER_AGENT"] ??
false,
82 "REQUEST_URI" =>
$url,
84 "USER_ID" => is_object(
$USER) && (
$USER->GetID() > 0) ?
$USER->GetID() :
false,
85 "GUEST_ID" => (isset($session) && $session->isStarted() && $session->has(
"SESS_GUEST_ID") && $session[
"SESS_GUEST_ID"] > 0 ? $session[
"SESS_GUEST_ID"] :
false),
86 "DESCRIPTION" =>
$arFields[
"DESCRIPTION"],
87 "~TIMESTAMP_X" =>
$DB->GetNowFunction(),
90 $level = $arSeverity[
$arFields[
"SEVERITY"]] ?? LogLevel::INFO;
93 return $DB->Add(
"b_event_log",
$arFields, [
"DESCRIPTION"],
"",
false,
"", [
"ignore_dml" =>
true]);
98 $sysLogger = static::getSysLogger();
99 $fileLogger = static::getFileLogger();
101 if ($sysLogger || $fileLogger)
104 "severity" =>
$fields[
"SEVERITY"],
105 "auditTypeId" =>
$fields[
"AUDIT_TYPE_ID"],
106 "moduleId" =>
$fields[
"MODULE_ID"],
107 "itemId" =>
$fields[
"ITEM_ID"],
108 "remoteAddr" =>
$fields[
"REMOTE_ADDR"],
109 "userAgent" =>
$fields[
"USER_AGENT"] !==
false ?
$fields[
"USER_AGENT"] :
null,
110 "requestUri" =>
$fields[
"REQUEST_URI"],
111 "siteId" =>
$fields[
"SITE_ID"] !==
false ?
$fields[
"SITE_ID"] :
null,
112 "userId" =>
$fields[
"USER_ID"] !==
false ?
$fields[
"USER_ID"] :
null,
113 "guestId" =>
$fields[
"GUEST_ID"] !==
false ?
$fields[
"GUEST_ID"] :
null,
114 "description" =>
$fields[
"DESCRIPTION"],
115 "timestamp" => date(
'Y-m-d H:i:s'),
116 "host" =>
$_SERVER[
'HTTP_HOST'] ??
null,
119 $sysLogger?->log($level,
'', $logFields);
120 $fileLogger?->log($level,
'', $logFields);
126 static $logger =
null;
128 if ($logger ===
null)
130 if (COption::GetOptionString(
'main',
'event_log_syslog') ===
'Y')
132 $logger = Logger::create(
'main.EventLog.SysLogger');
133 if ($logger ===
null)
137 $logger->setFormatter($formatter);
142 $logger =
new NullLogger();
146 return ($logger instanceof NullLogger ?
null : $logger);
151 static $logger =
null;
153 if ($logger ===
null)
155 if (COption::GetOptionString(
'main',
'event_log_filelog') ===
'Y')
157 $path = COption::GetOptionString(
'main',
'event_log_filelog_path');
160 $logger = Logger::create(
'main.EventLog.FileLogger', [
$path, 0]);
161 if ($logger ===
null)
165 $logger->setFormatter($formatter);
169 if ($logger ===
null)
171 $logger =
new NullLogger();
175 return ($logger instanceof NullLogger ?
null : $logger);
183 $cleanup_days = COption::GetOptionInt(
"main",
"event_log_cleanup_days", 7);
184 if ($cleanup_days > 0)
186 $arDate = localtime(time());
187 $date = mktime(0, 0, 0, $arDate[4] + 1, $arDate[3] - $cleanup_days, 1900 + $arDate[5]);
188 $DB->Query(
"DELETE FROM b_event_log WHERE TIMESTAMP_X <= " .
$DB->CharToDateFunction(ConvertTimeStamp($date,
"FULL")));
191 return "CEventLog::CleanUpAgent();";
194 public static function GetList($arOrder = [
"ID" =>
"DESC"],
$arFilter = [], $arNavParams =
false)
201 $arFields = [
"ID",
"TIMESTAMP_X",
"AUDIT_TYPE_ID",
"MODULE_ID",
"SEVERITY",
"ITEM_ID",
"SITE_ID",
"REMOTE_ADDR",
"USER_AGENT",
"REQUEST_URI",
"USER_ID",
"GUEST_ID"];
204 "TIMESTAMP_X" =>
"L.TIMESTAMP_X",
224 $arSqlSearch[] =
"L.ID=" . intval(
$val);
226 case "TIMESTAMP_X_1":
227 $arSqlSearch[] =
"L.TIMESTAMP_X >= " .
$DB->CharToDateFunction(
$DB->ForSql(
$val));
229 case "TIMESTAMP_X_2":
230 $arSqlSearch[] =
"L.TIMESTAMP_X <= " .
$DB->CharToDateFunction(
$DB->ForSql(
$val));
232 case "=AUDIT_TYPE_ID":
236 foreach (
$val as $value)
238 $value = trim($value);
255 $arSqlSearch[] =
"L.AUDIT_TYPE_ID in ('" . implode(
"', '",
$arValues) .
"')";
262 foreach (
$val as $value)
264 $arSqlSearchTmp = [];
265 foreach ($value as $item2 => $value2)
269 $arSqlSearchTmp[] =
"L." . $item2 .
" = '" .
$DB->ForSQL($value2) .
"'";
272 if (!empty($arSqlSearchTmp))
274 $arSqlSearch2[] = implode(
" AND ", $arSqlSearchTmp);
277 if (!empty($arSqlSearch2))
279 $arSqlSearch[] =
"(" . implode(
" OR ", $arSqlSearch2) .
")";
284 case "AUDIT_TYPE_ID":
295 $arSqlSearch[] =
"L." .
$key .
" = " . intval(
$val);
300 foreach ($arOrder as $by =>
$order)
302 $by = mb_strtoupper($by);
304 if (array_key_exists($by, $arOFields))
310 $arSqlOrder[$by] = $arOFields[$by] .
" " .
$order;
319 if (!empty($arSqlSearch))
321 $strSql .=
" WHERE " . implode(
" AND ", $arSqlSearch);
324 if (is_array($arNavParams))
326 $res_cnt =
$DB->Query(
"SELECT count(1) C" . $strSql);
327 $res_cnt = $res_cnt->Fetch();
328 $cnt = $res_cnt[
"C"];
330 if (!empty($arSqlOrder))
332 $strSql .=
" ORDER BY " . implode(
", ", $arSqlOrder);
339 ," .
$DB->DateToCharFunction(
"L.TIMESTAMP_X") .
" as TIMESTAMP_X
351 " . $strSql, $cnt, $arNavParams);
357 if (!empty($arSqlOrder))
359 $strSql .=
" ORDER BY " . implode(
", ", $arSqlOrder);
362 return $DB->Query(
"SELECT L.*, " .
$DB->DateToCharFunction(
"L.TIMESTAMP_X") .
" as TIMESTAMP_X" . $strSql);
369 "USER_AUTHORIZE" =>
"[USER_AUTHORIZE] " .
GetMessage(
"MAIN_EVENTLOG_USER_AUTHORIZE"),
370 "USER_DELETE" =>
"[USER_DELETE] " .
GetMessage(
"MAIN_EVENTLOG_USER_DELETE"),
371 "USER_INFO" =>
"[USER_INFO] " .
GetMessage(
"MAIN_EVENTLOG_USER_INFO"),
372 "USER_LOGIN" =>
"[USER_LOGIN] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGIN"),
373 "USER_LOGIN_INCORRECT_CAPTCHA" =>
"[USER_LOGIN_INCORRECT_CAPTCHA] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGIN_INCORRECT_CAPTCHA"),
374 "USER_LOGIN_BLOCKED" =>
"[USER_LOGIN_BLOCKED] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGIN_BLOCKED"),
375 "USER_LOGIN_NOT_FOUND" =>
"[USER_LOGIN_NOT_FOUND] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGIN_NOT_FOUND"),
376 "USER_LOGINBYHASH" =>
"[USER_LOGINBYHASH] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGINBYHASH_FAILED"),
377 "USER_LOGOUT" =>
"[USER_LOGOUT] " .
GetMessage(
"MAIN_EVENTLOG_USER_LOGOUT"),
378 "USER_PASSWORD_CHANGED" =>
"[USER_PASSWORD_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_USER_PASSWORD_CHANGED"),
379 "USER_BLOCKED" =>
"[USER_BLOCKED] " .
GetMessage(
"MAIN_EVENTLOG_USER_BLOCKED"),
380 "USER_PERMISSIONS_FAIL" =>
"[USER_PERMISSIONS_FAIL] " .
GetMessage(
"MAIN_EVENTLOG_USER_PERMISSIONS_FAIL"),
381 "USER_REGISTER" =>
"[USER_REGISTER] " .
GetMessage(
"MAIN_EVENTLOG_USER_REGISTER"),
382 "USER_REGISTER_FAIL" =>
"[USER_REGISTER_FAIL] " .
GetMessage(
"MAIN_EVENTLOG_USER_REGISTER_FAIL"),
383 "USER_GROUP_CHANGED" =>
"[USER_GROUP_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_GROUP"),
384 "GROUP_ADDED" =>
"[GROUP_ADDED] " .
GetMessage(
'MAIN_EVENTLOG_GROUP_ADDED'),
385 "GROUP_UPDATED" =>
"[GROUP_UPDATED] " .
GetMessage(
'MAIN_EVENTLOG_GROUP_UPDATED'),
386 "GROUP_DELETED" =>
"[GROUP_DELETED] " .
GetMessage(
'MAIN_EVENTLOG_GROUP_DELETED'),
387 "GROUP_POLICY_CHANGED" =>
"[GROUP_POLICY_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_GROUP_POLICY"),
388 "MODULE_RIGHTS_CHANGED" =>
"[MODULE_RIGHTS_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_MODULE"),
389 "FILE_PERMISSION_CHANGED" =>
"[FILE_PERMISSION_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_FILE"),
390 "TASK_CHANGED" =>
"[TASK_CHANGED] " .
GetMessage(
"MAIN_EVENTLOG_TASK"),
391 "MP_MODULE_INSTALLED" =>
"[MP_MODULE_INSTALLED] " .
GetMessage(
"MAIN_EVENTLOG_MP_MODULE_INSTALLED"),
392 "MP_MODULE_UNINSTALLED" =>
"[MP_MODULE_UNINSTALLED] " .
GetMessage(
"MAIN_EVENTLOG_MP_MODULE_UNINSTALLED"),
393 "MP_MODULE_DELETED" =>
"[MP_MODULE_DELETED] " .
GetMessage(
"MAIN_EVENTLOG_MP_MODULE_DELETED"),
394 "MP_MODULE_DOWNLOADED" =>
"[MP_MODULE_DOWNLOADED] " .
GetMessage(
"MAIN_EVENTLOG_MP_MODULE_DOWNLOADED"),
397 foreach (
GetModuleEvents(
"main",
"OnEventLogGetAuditTypes",
true) as $arEvent)
402 $arAuditTypes = array_merge(
$ar, $arAuditTypes);
406 ksort($arAuditTypes);
408 return $arAuditTypes;
423 if (COption::GetOptionString(
"main",
"event_log_register",
"N") ===
"Y" || COption::GetOptionString(
"main",
"event_log_user_delete",
"N") ===
"Y" || COption::GetOptionString(
"main",
"event_log_user_edit",
"N") ===
"Y" || COption::GetOptionString(
"main",
"event_log_user_groups",
"N") ===
"Y")
433 "USER_REGISTER" =>
"[USER_REGISTER] " .
GetMessage(
"LOG_TYPE_NEW_USERS"),
434 "USER_DELETE" =>
"[USER_DELETE] " .
GetMessage(
"LOG_TYPE_USER_DELETE"),
435 "USER_EDIT" =>
"[USER_EDIT] " .
GetMessage(
"LOG_TYPE_USER_EDIT"),
436 "USER_GROUP_CHANGED" =>
"[USER_GROUP_CHANGED] " .
GetMessage(
"LOG_TYPE_USER_GROUP_CHANGED"),
437 "BACKUP_ERROR" =>
"[BACKUP_ERROR] " .
GetMessage(
"LOG_TYPE_BACKUP_ERROR"),
438 "BACKUP_SUCCESS" =>
"[BACKUP_SUCCESS] " .
GetMessage(
"LOG_TYPE_BACKUP_SUCCESS"),
439 "SITE_CHECKER_SUCCESS" =>
"[SITE_CHECKER_SUCCESS] " .
GetMessage(
"LOG_TYPE_SITE_CHECK_SUCCESS"),
440 "SITE_CHECKER_ERROR" =>
"[SITE_CHECKER_ERROR] " .
GetMessage(
"LOG_TYPE_SITE_CHECK_ERROR"),
446 $DESCRIPTION = unserialize($row[
"DESCRIPTION"], [
'allowed_classes' =>
false]);
447 $userURL = $EventPrint =
"";
448 $rsUser = CUser::GetByID($row[
'ITEM_ID']);
449 if ($rsUser->GetNext())
451 $userURL =
SITE_DIR . CComponentEngine::MakePathFromTemplate(
$arParams[
'USER_PATH'], [
"user_id" => $row[
'ITEM_ID'],
"SITE_ID" =>
""]);
454 switch ($row[
'AUDIT_TYPE_ID'])
456 case "USER_REGISTER":
457 $EventPrint =
GetMessage(
"LOG_USER_REGISTER");
465 case "USER_GROUP_CHANGED":
466 $EventPrint =
GetMessage(
"LOG_USER_GROUP_CHANGED");
471 "eventType" => $EventPrint,
472 "eventName" => $EventName,
473 "eventURL" => $userURL,
479 $ar[] = [
"AUDIT_TYPE_ID" =>
"USER_REGISTER"];
480 $ar[] = [
"AUDIT_TYPE_ID" =>
"USER_DELETE"];
481 $ar[] = [
"AUDIT_TYPE_ID" =>
"USER_EDIT"];
482 $ar[] = [
"AUDIT_TYPE_ID" =>
"USER_GROUP_CHANGED"];
static writeLogs(string $level, array $fields)
static Log($SEVERITY, $AUDIT_TYPE_ID, $MODULE_ID, $ITEM_ID, $DESCRIPTION=false, $SITE_ID=false)
static GetList($arOrder=["ID"=> "DESC"], $arFilter=[], $arNavParams=false)
static GetEventInfo($row, $arParams)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
const SITE_DIR(!defined('LANG'))
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key