diff --git a/csharp/App/SaliMax/src/Logfile.cs b/csharp/App/SaliMax/src/Logfile.cs index fb7c18f65..d31ebd8c8 100644 --- a/csharp/App/SaliMax/src/Logfile.cs +++ b/csharp/App/SaliMax/src/Logfile.cs @@ -3,34 +3,38 @@ using Microsoft.Extensions.Logging; namespace InnovEnergy.App.SaliMax; -public class CustomLogger(String logFilePath, Int64 maxFileSizeBytes, Int32 maxLogFileCount) - : ILogger +public class CustomLogger : ILogger { - private Int64 _CurrentFileSizeBytes = File.Exists(logFilePath) - ? new FileInfo(logFilePath).Length - : 0; + private readonly String _LogFilePath; + private readonly Int64 _MaxFileSizeBytes; + private readonly Int32 _MaxLogFileCount; + private Int64 _CurrentFileSizeBytes; + + public CustomLogger(String logFilePath, Int64 maxFileSizeBytes, Int32 maxLogFileCount) + { + _LogFilePath = logFilePath; + _MaxFileSizeBytes = maxFileSizeBytes; + _MaxLogFileCount = maxLogFileCount; + _CurrentFileSizeBytes = File.Exists(logFilePath) ? new FileInfo(logFilePath).Length : 0; + } public IDisposable? BeginScope(TState state) where TState : notnull => throw new NotImplementedException(); public Boolean IsEnabled(LogLevel logLevel) => true; // Enable logging for all levels - public void Log(LogLevel logLevel, - EventId eventId, - TState state, - Exception? exception, - Func formatter) + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { var logMessage = formatter(state, exception!); // Check the file size and rotate the log file if necessary - if (_CurrentFileSizeBytes + logMessage.Length >= maxFileSizeBytes) + if (_CurrentFileSizeBytes + logMessage.Length >= _MaxFileSizeBytes) { RotateLogFile(); _CurrentFileSizeBytes = 0; } // Write the log message to the file - File.AppendAllText(logFilePath, logMessage + Environment.NewLine); + File.AppendAllText(_LogFilePath, logMessage + Environment.NewLine); _CurrentFileSizeBytes += logMessage.Length; Console.WriteLine(logMessage); @@ -39,20 +43,20 @@ public class CustomLogger(String logFilePath, Int64 maxFileSizeBytes, Int32 maxL private void RotateLogFile() { // Check the log file count and delete the oldest file if necessary - var logFileDir = Path.GetDirectoryName(logFilePath)!; - var logFileExt = Path.GetExtension(logFilePath); - var logFileBaseName = Path.GetFileNameWithoutExtension(logFilePath); + var logFileDir = Path.GetDirectoryName(_LogFilePath)!; + var logFileExt = Path.GetExtension(_LogFilePath); + var logFileBaseName = Path.GetFileNameWithoutExtension(_LogFilePath); var logFiles = Directory .GetFiles(logFileDir, $"{logFileBaseName}_*{logFileExt}") .OrderBy(file => file) .ToList(); - if (logFiles.Count >= maxLogFileCount) + if (logFiles.Count >= _MaxLogFileCount) File.Delete(logFiles.First()); // Rename the current log file with a timestamp var logFileBackupPath = Path.Combine(logFileDir, $"{logFileBaseName}_{UnixTime.Now}{logFileExt}"); - File.Move(logFilePath, logFileBackupPath); + File.Move(_LogFilePath, logFileBackupPath); } }