use primary constructor
This commit is contained in:
parent
2d6c6b6140
commit
9b4b947569
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue