All checks were successful
/ Sourcemod v1.11.x (push) Successful in 55s
/ Sourcemod v1.12.x (push) Successful in 52s
/ Sourcemod v1.13.x (push) Successful in 43s
/ Create release for tags (push) Has been skipped
/ Deploy release (push) Has been skipped
/ Build Website (push) Successful in 3m17s
/ deploy (push) Has been skipped
134 lines
No EOL
3.9 KiB
SourcePawn
134 lines
No EOL
3.9 KiB
SourcePawn
#if defined _log_included
|
|
#endinput
|
|
#endif
|
|
#define _log_included
|
|
#define LOG_BUFFER_SIZE 1024
|
|
|
|
int LOG_LEVEL = Log_Info;
|
|
|
|
enum LogLevel {
|
|
Log_Error = 1,
|
|
Log_Warn,
|
|
Log_Info,
|
|
Log_Debug,
|
|
Log_Trace,
|
|
Log__MaxLevels
|
|
}
|
|
char LOG_LEVEL_PREFIX[Log__MaxLevels][] = {
|
|
"-",
|
|
"ERROR",
|
|
"WARN",
|
|
"INFO",
|
|
"DEBUG",
|
|
"TRACE"
|
|
};
|
|
|
|
static int adminFlag;
|
|
static char logPrefix[64] = "LOG_CALL_Log_Init_FIRST";
|
|
static char adminCmd[64];
|
|
static int defaultTargets;
|
|
|
|
void Log_Init(const char[] prefix, LogLevel level, int admFlag = ADMFLAG_GENERIC, const char[] admCmd = "sm_kick", int _defaultTargets = Target_Console) {
|
|
strcopy(logPrefix, sizeof(logPrefix), prefix);
|
|
LOG_LEVEL = level;
|
|
adminFlag = admFlag;
|
|
strcopy(adminCmd, sizeof(adminCmd), admCmd);
|
|
defaultTargets = _defaultTargets;
|
|
}
|
|
|
|
public void PrintToConsoleAdmins(const char[] format, any ...) {
|
|
char buffer[255];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
for(int i = 1; i < MaxClients; i++) {
|
|
if(IsClientInGame(i)) {
|
|
if(CheckCommandAccess(i, adminCmd, adminFlag)) {
|
|
PrintToConsole(i, "%s", buffer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void PrintToChatAdmins(const char[] format, any ...) {
|
|
char buffer[255];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
for(int i = 1; i < MaxClients; i++) {
|
|
if(IsClientInGame(i)) {
|
|
if(CheckCommandAccess(i, adminCmd, adminFlag)) {
|
|
PrintToChat(i, "%s", buffer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
enum LogTargets {
|
|
/// Logs to server console (LogMessage)
|
|
Target_ServerConsole = 1,
|
|
/// Logs to all admins' consoles (if they have sm_ban permission)
|
|
Target_AdminConsole = 2,
|
|
/// Logs to all admins' chats (if they have sm_ban permission)
|
|
Target_AdminChat = 4,
|
|
|
|
/// Logs to all targets (ServerConsole + AdminConsole + AdminChat)
|
|
Target_All = Target_ServerConsole | Target_AdminConsole | Target_AdminChat,
|
|
/// Logs to only admin console and server console
|
|
Target_Console = Target_ServerConsole | Target_AdminConsole
|
|
}
|
|
|
|
/// Logs to specified targets at specified level
|
|
public void Log(LogLevel level, int targets, const char[] format, any ...) {
|
|
if(view_as<int>(level) > view_as<int>(LOG_LEVEL)) return;
|
|
|
|
char buffer[LOG_BUFFER_SIZE];
|
|
VFormat(buffer, sizeof(buffer), format, 4);
|
|
|
|
_log(level, targets, buffer);
|
|
}
|
|
|
|
public void LogWarn(const char[] format, any ...) {
|
|
char buffer[LOG_BUFFER_SIZE];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
_log(Log_Warn, defaultTargets, buffer);
|
|
}
|
|
|
|
public void LogInfo(const char[] format, any ...) {
|
|
char buffer[LOG_BUFFER_SIZE];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
_log(Log_Info, defaultTargets, buffer);
|
|
}
|
|
|
|
public void LogDebug(const char[] format, any ...) {
|
|
char buffer[LOG_BUFFER_SIZE];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
_log(Log_Debug, defaultTargets, buffer);
|
|
}
|
|
|
|
public void LogTrace(const char[] format, any ...) {
|
|
char buffer[LOG_BUFFER_SIZE];
|
|
VFormat(buffer, sizeof(buffer), format, 2);
|
|
_log(Log_Trace, defaultTargets, buffer);
|
|
}
|
|
|
|
|
|
void _log(LogLevel level, int targets, const char[] msg) {
|
|
if(view_as<int>(level) > view_as<int>(LOG_LEVEL)) return;
|
|
|
|
// Use LogError for errors shown to server console.
|
|
if(level == Log_Error) {
|
|
LogError("%s", msg);
|
|
} else {
|
|
LogMessage("%s: %s", LOG_LEVEL_PREFIX[level], msg);
|
|
}
|
|
|
|
// Log to any configured targets
|
|
if(targets & view_as<int>(Target_AdminConsole) == view_as<int>(Target_AdminConsole))
|
|
PrintToConsoleAdmins("[%s] [%s] %s", logPrefix, LOG_LEVEL_PREFIX[level], msg);
|
|
if(targets & view_as<int>(Target_AdminChat) == view_as<int>(Target_AdminChat))
|
|
PrintToChatAdmins("[%s] [%s] %s", logPrefix, LOG_LEVEL_PREFIX[level], msg);
|
|
}
|
|
|
|
/// Use this change hook callback to automatically set LOG_LEVEL to a cvar's value
|
|
stock void LOG_OnCvarChange(ConVar convar, const char[] oldValue, const char[] newValue) {
|
|
#pragma unused oldValue
|
|
#pragma unused newValue
|
|
LOG_LEVEL = convar.IntValue;
|
|
} |