255) { $message = mb_substr($message, 0, 255); } if (mb_strlen($details) > 65535) { $details = mb_substr($details, 0, 65535); } $data = [ 'type' => $type, 'message' => $message, 'details' => $details ]; Database::exec("INSERT INTO eventlog (dateline, logtypeid, description, extra)" . " VALUES (UNIX_TIMESTAMP(), :type, :message, :details)", $data, true); self::applyFilterRules('#serverlog', $data); } public static function failure($message, $details = '') { self::log('failure', $message, $details); Property::setLastWarningId(Database::lastInsertId()); } public static function warning($message, $details = '') { self::log('warning', $message, $details); Property::setLastWarningId(Database::lastInsertId()); } public static function info($message, $details = '') { self::log('info', $message, $details); } /** * DELETE ENTIRE EVENT LOG! */ public static function clear() { if (!Module::isAvailable('eventlog')) return; Database::exec("TRUNCATE eventlog"); } /** * @param string $type the event. Will either be client state like ~poweron, ~runstate etc. or a client log type * @param array $data A structured array containing event specific data that can be matched. */ public static function applyFilterRules(string $type, array $data) { if (!Module::isAvailable('eventlog')) return; FilterRuleProcessor::applyFilterRules($type, $data); } }