Anton Tarasenko
4 years ago
2 changed files with 258 additions and 0 deletions
@ -0,0 +1,92 @@
|
||||
/** |
||||
* API that provides functions quick access to Acedia's |
||||
* logging functionality. |
||||
* Copyright 2020 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class LoggerAPI extends Singleton; |
||||
|
||||
var private LoggerService logService; |
||||
|
||||
protected function OnCreated() |
||||
{ |
||||
logService = LoggerService(class'LoggerService'.static.Require()); |
||||
} |
||||
|
||||
public final function Track(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Track, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Track, message); |
||||
} |
||||
|
||||
public final function Debug(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Debug, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Debug, message); |
||||
} |
||||
|
||||
public final function Info(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Info, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Info, message); |
||||
} |
||||
|
||||
public final function Warning(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Warning, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Warning, message); |
||||
} |
||||
|
||||
public final function Failure(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Failure, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Failure, message); |
||||
} |
||||
|
||||
public final function Fatal(string message) |
||||
{ |
||||
if (logService == none) |
||||
{ |
||||
class'LoggerService'.static.LogMessageToKFLog(LOG_Fatal, message); |
||||
return; |
||||
} |
||||
logService.LogMessage(LOG_Fatal, message); |
||||
} |
||||
|
||||
defaultproperties |
||||
{ |
||||
} |
@ -0,0 +1,166 @@
|
||||
/** |
||||
* Logger that allows to separate log messages into several levels of |
||||
* significance and lets users and admins to access only the ones they want |
||||
* and/or receive notifications when they happen. |
||||
* Copyright 2020 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class LoggerService extends Service |
||||
config(AcediaLogger); |
||||
|
||||
// Log levels, available in Acedia. |
||||
enum LogLevel |
||||
{ |
||||
// For the purposes of "tracing" the code, when trying to figure out |
||||
// where exactly problems occurred. |
||||
// Should not be used in any released version of |
||||
// your packages/mutators. |
||||
LOG_Track, |
||||
// Information that can be used to track down errors that occur on |
||||
// other people's systems, that developer cannot otherwise pinpoint. |
||||
// Should be used with purpose of tracking a certain issue and |
||||
// not "just in case". |
||||
LOG_Debug, |
||||
// Information about important events that should be occurring under |
||||
// normal conditions, such as initializations/shutdowns, |
||||
// successful completion of significant events, configuration assumptions. |
||||
// Should not occur too often. |
||||
LOG_Info, |
||||
// For recoverable issues, anything that might cause errors or |
||||
// oddities in behavior. |
||||
// Should be used sparingly, i.e. player disconnecting might cause |
||||
// interruption in some logic, but should not cause a warning, |
||||
// since it is something expected to happen normally. |
||||
LOG_Warning, |
||||
// Use this for errors, - events that some operation cannot recover from, |
||||
// but still does not require your module to shut down. |
||||
LOG_Failure, |
||||
// Anything that does not allow your module or game to function, |
||||
// completely irrecoverable failure state. |
||||
LOG_Fatal |
||||
}; |
||||
|
||||
var private const string kfLogPrefix; |
||||
var private const string traceLevelName; |
||||
var private const string DebugLevelName; |
||||
var private const string infoLevelName; |
||||
var private const string warningLevelName; |
||||
var private const string errorLevelName; |
||||
var private const string fatalLevelName; |
||||
|
||||
var private config array< class<Manifest> > registeredManifests; |
||||
var private config bool logTraceInKFLog; |
||||
var private config bool logDebugInKFLog; |
||||
var private config bool logInfoInKFLog; |
||||
var private config bool logWarningInKFLog; |
||||
var private config bool logErrorInKFLog; |
||||
var private config bool logFatalInKFLog; |
||||
|
||||
var private array<string> traceMessages; |
||||
var private array<string> debugMessages; |
||||
var private array<string> infoMessages; |
||||
var private array<string> warningMessages; |
||||
var private array<string> errorMessages; |
||||
var private array<string> fatalMessages; |
||||
|
||||
public final function bool ShouldAddToKFLog(LogLevel messageLevel) |
||||
{ |
||||
if (messageLevel == LOG_Trace && logTraceInKFLog) return true; |
||||
if (messageLevel == LOG_Debug && logDebugInKFLog) return true; |
||||
if (messageLevel == LOG_Info && logInfoInKFLog) return true; |
||||
if (messageLevel == LOG_Warning && logWarningInKFLog) return true; |
||||
if (messageLevel == LOG_Error && logErrorInKFLog) return true; |
||||
if (messageLevel == LOG_Fatal && logFatalInKFLog) return true; |
||||
return false; |
||||
} |
||||
|
||||
public final static function LogMessageToKFLog |
||||
( |
||||
LogLevel messageLevel, |
||||
string message |
||||
) |
||||
{ |
||||
local string levelPrefix; |
||||
levelPrefix = default.kfLogPrefix; |
||||
switch (messageLevel) |
||||
{ |
||||
case LOG_Trace: |
||||
levelPrefix = levelPrefix $ default.traceLevelName; |
||||
break; |
||||
case LOG_Debug: |
||||
levelPrefix = levelPrefix $ default.debugLevelName; |
||||
break; |
||||
case LOG_Info: |
||||
levelPrefix = levelPrefix $ default.infoLevelName; |
||||
break; |
||||
case LOG_Warning: |
||||
levelPrefix = levelPrefix $ default.warningLevelName; |
||||
break; |
||||
case LOG_Error: |
||||
levelPrefix = levelPrefix $ default.errorLevelName; |
||||
break; |
||||
case LOG_Fatal: |
||||
levelPrefix = levelPrefix $ default.fatalLevelName; |
||||
break; |
||||
default: |
||||
} |
||||
Log(levelPrefix @ message); |
||||
} |
||||
|
||||
public final function LogMessage(LogLevel messageLevel, string message) |
||||
{ |
||||
switch (messageLevel) |
||||
{ |
||||
case LOG_Trace: |
||||
traceMessages[traceMessages.length] = message; |
||||
case LOG_Debug: |
||||
debugMessages[debugMessages.length] = message; |
||||
case LOG_Info: |
||||
infoMessages[infoMessages.length] = message; |
||||
case LOG_Warning: |
||||
warningMessages[warningMessages.length] = message; |
||||
case LOG_Error: |
||||
errorMessages[errorMessages.length] = message; |
||||
case LOG_Fatal: |
||||
fatalMessages[fatalMessages.length] = message; |
||||
default: |
||||
} |
||||
if (ShouldAddToKFLog(messageLevel)) |
||||
{ |
||||
LogMessageToKFLog(messageLevel, message); |
||||
} |
||||
} |
||||
|
||||
defaultproperties |
||||
{ |
||||
// Log everything by default, if someone does not like it - |
||||
// he/she can disable it themselves. |
||||
logTraceInKFLog = true |
||||
logDebugInKFLog = true |
||||
logInfoInKFLog = true |
||||
logWarningInKFLog = true |
||||
logErrorInKFLog = true |
||||
logFatalInKFLog = true |
||||
// Parts of the prefix for our log messages, redirected into kf log file. |
||||
kfLogPrefix = "Acedia:" |
||||
traceLevelName = "Trace" |
||||
debugLevelName = "Debug" |
||||
infoLevelName = "Info" |
||||
warningLevelName = "Warning" |
||||
errorLevelName = "Error" |
||||
fatalLevelName = "Fatal" |
||||
} |
Reference in new issue