Summary
Shared named-logger library for Arma Reforger mods with severity filtering, console output, mandatory master logging, optional secondary logs, retention controls, and simple runtime configuration.
Description
ScriptLogger
Shared named-logger library for Arma Reforger by ForgedInFire.
NAMED LOGGER API
Request a logger by name. GetLogger() creates it on first use and returns the same instance on subsequent requests.
FiF_SL_Logger logger = FiF_SL_SLogger.GetLogger("RUPV2");
logger.Info("Player rank loaded", "RUPV2_RankStorage", "LoadRank");
logger.Error("Unable to load rank", "RUPV2_RankStorage", "LoadRank");
No configuration prefab, component, or world entity is required.
LOGGER SETTINGS
Each logger begins with the ScriptLogger defaults.
ConsoleEnabled
Default: true
Route accepted entries to engine Print.
DebugEnabled
Default: false
Allow DEBUG, VERBOSE, and SPAM messages.
MinimumLevel
Default: NORMAL
Minimum accepted severity.
RetentionLines
Default: 10000
Secondary-log retention.
LoggerLogEnabled
Default: false
Enable secondary-log output.
LoggerLogPath
Default: empty
When secondary logging is enabled, an empty path derives:
FiF_Logs/<logger name>.log
Configure a logger with typed setters:
logger.SetConsoleEnabled(false);
logger.SetDebugEnabled(true);
logger.SetMinimumLevel(LogLevel.DEBUG);
logger.SetRetentionLines(5000);
logger.SetLoggerLogEnabled(true);
logger.SetLoggerLogPath("FiF_Logs/RUPV2.log");
BULK OVERRIDES
Settings may also be supplied using FiF_SL_Overrides:
FiF_SL_Overrides overrides = new FiF_SL_Overrides();
overrides.Insert("ConsoleEnabled", "false");
overrides.Insert("DebugEnabled", "true");
overrides.Insert("MinimumLevel", "DEBUG");
overrides.Insert("RetentionLines", "1000");
overrides.Insert("LoggerLogEnabled", "true");
overrides.Insert("LoggerLogPath", "FiF_Logs/RUPV2.log");
FiF_SL_Logger logger =
FiF_SL_SLogger.GetLogger("RUPV2", overrides);
MinimumLevel accepts:
SPAM
VERBOSE
DEBUG
NORMAL
WARNING
ERROR
FATAL
Overrides may also be applied with:
logger.SetOverrides(overrides);
SETTINGS AND OVERRIDES
Inspect configuration with:
logger.GetSettings();
logger.GetDefaults();
logger.GetOverrides();
GetOverrides() returns settings that currently differ from the ScriptLogger defaults.
Restore one setting or all settings:
logger.ResetSetting("MinimumLevel");
logger.ResetSettings();
LOG LEVELS
logger.Spam("message");
logger.Verbose("message");
logger.Debug("message");
logger.Info("message");
logger.Warning("message");
logger.Error("message");
logger.Fatal("message");
DebugEnabled controls SPAM, VERBOSE, and DEBUG eligibility. MinimumLevel is then applied to accepted messages.
Workbench may filter lower-severity console entries even when ScriptLogger accepts and writes them to file.
MASTER LOG
Every accepted message is always written to:
$profile:FiF_Logs/ScriptLogger.log
The master log path and retention are controlled internally and cannot be disabled by individual loggers.
Example:
2026-09-23 10:05:58 [DEBUG] [RUPV2] RankStorage::LoadRank::Player rank loaded
SECONDARY LOGS
A logger may additionally write to its own secondary log:
logger.SetLoggerLogPath("FiF_Logs/RUPV2.log");
logger.SetLoggerLogEnabled(true);
The message is then written to both the master and secondary logs.
Multiple named loggers may share a secondary file while retaining their logger identities.
FiF_SL_Logger input = FiF_SL_SLogger.GetLogger("MyMod.Input");
FiF_SL_Logger output = FiF_SL_SLogger.GetLogger("MyMod.Output");
input.SetLoggerLogPath("FiF_Logs/MyMod_IO.log");
output.SetLoggerLogPath("FiF_Logs/MyMod_IO.log");
input.SetLoggerLogEnabled(true);
output.SetLoggerLogEnabled(true);
FILE HANDLING
Secondary paths are relative to $profile:.
ScriptLogger handles retention, temporary-file replacement, backup protection, and file-write failures internally.
AUTHOR
Author: ForgedInFire
Contact: [email protected]License
Arma Public License (APL)