mlaumcherb/Mlaumcherb.Client.Avalonia/LauncherLogger.cs
2024-12-27 21:11:19 +05:00

77 lines
2.2 KiB
C#

namespace Mlaumcherb.Client.Avalonia;
public class LauncherLogger : ILogger
{
private CompositeLogger _compositeLogger;
private FileLogger _fileLogger;
public static readonly IOPath LogsDirectory = "launcher_logs";
public IOPath LogfileName => _fileLogger.LogfileName;
public LauncherLogger()
{
_fileLogger = new FileLogger(LogsDirectory, "млаумчерб");
ILogger[] loggers =
[
_fileLogger,
#if DEBUG
new ConsoleLogger(),
#endif
];
_compositeLogger = new CompositeLogger(loggers);
}
public record LogMessage(string context, LogSeverity severity, object message, ILogFormat format);
public delegate void LogHandler(LogMessage msg);
public event LogHandler? OnLogMessage;
public void Log(string context, LogSeverity severity, object message, ILogFormat format)
{
_compositeLogger.Log(context, severity, message, format);
bool isEnabled = severity switch
{
LogSeverity.Debug => DebugLogEnabled,
LogSeverity.Info => InfoLogEnabled,
LogSeverity.Warn => WarnLogEnabled,
LogSeverity.Error => ErrorLogEnabled,
_ => throw new ArgumentOutOfRangeException(nameof(severity), severity, null)
};
if(isEnabled)
OnLogMessage?.Invoke(new(context, severity, message, format));
}
public void Dispose()
{
_compositeLogger.Dispose();
}
public ILogFormat Format
{
get => _compositeLogger.Format;
set => _compositeLogger.Format = value;
}
public bool DebugLogEnabled
{
get => _compositeLogger.DebugLogEnabled;
set => _compositeLogger.DebugLogEnabled = value;
}
public bool InfoLogEnabled
{
get => _compositeLogger.InfoLogEnabled;
set => _compositeLogger.InfoLogEnabled = value;
}
public bool WarnLogEnabled
{
get => _compositeLogger.WarnLogEnabled;
set => _compositeLogger.WarnLogEnabled = value;
}
public bool ErrorLogEnabled
{
get => _compositeLogger.ErrorLogEnabled;
set => _compositeLogger.ErrorLogEnabled = value;
}
}