use primary constructor

This commit is contained in:
ig 2023-08-16 15:11:37 +02:00
parent 2d6c6b6140
commit 9b4b947569
1 changed files with 20 additions and 30 deletions

View File

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