Added test program
This commit is contained in:
@@ -1,21 +1,19 @@
|
||||
using EonaCat.Logger.Exceptions;
|
||||
using EonaCat.Logger.Syslog;
|
||||
using EonaCat.Logger.Syslog;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using EonaCat.Logger.EonaCatCoreLogger;
|
||||
using EonaCat.Logger.EonaCatCoreLogger.Extensions;
|
||||
using EonaCat.Logger.EonaCatCoreLogger.Models;
|
||||
using EonaCat.Logger.Extensions;
|
||||
|
||||
namespace EonaCat.Logger.Managers
|
||||
{
|
||||
// This file is part of the EonaCat project(s) which is released under the Apache License.
|
||||
// See the LICENSE file or go to https://EonaCat.com/License for full license details.
|
||||
|
||||
public partial class LogManager : ILogManager, IDisposable
|
||||
{
|
||||
private DateTime _logDate;
|
||||
@@ -25,47 +23,41 @@ namespace EonaCat.Logger.Managers
|
||||
public string CurrentLogFile => LoggerProvider is FileLoggerProvider fileLoggerProvider ? fileLoggerProvider.LogFile : string.Empty;
|
||||
|
||||
public bool IsRunning { get; private set; }
|
||||
public string CategoryName { get; set; }
|
||||
public string Id { get; }
|
||||
|
||||
private bool _disposed;
|
||||
private static LogManager _instance;
|
||||
private LoggerSettings _settings;
|
||||
|
||||
private readonly CancellationTokenSource _tokenSource = new CancellationTokenSource();
|
||||
|
||||
public static LogManager Instance => InstanceInit();
|
||||
|
||||
public LoggerSettings Settings
|
||||
{
|
||||
get
|
||||
{
|
||||
_settings ??= new LoggerSettings();
|
||||
return _settings;
|
||||
}
|
||||
set => _settings = value;
|
||||
}
|
||||
public LoggerSettings Settings { get; } = CreateDefaultSettings();
|
||||
|
||||
private static LogManager InstanceInit()
|
||||
{
|
||||
_instance ??= new LogManager(null, id: "EonaCat");
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = new LogManager(CreateDefaultSettings());
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
private static LoggerSettings CreateDefaultSettings()
|
||||
{
|
||||
if (_disposed)
|
||||
return;
|
||||
|
||||
if (disposing)
|
||||
{
|
||||
StopLogging();
|
||||
_tokenSource.Cancel();
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
var settings = new LoggerSettings();
|
||||
settings.Id = "EonaCatLogger";
|
||||
settings.MaxLogType = ELogType.TRACE;
|
||||
return settings;
|
||||
}
|
||||
|
||||
private void StartNewLog()
|
||||
protected virtual async Task DisposeAsync(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
await StopLoggingAsync().ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task StartNewLogAsync()
|
||||
{
|
||||
if (_tokenSource.IsCancellationRequested)
|
||||
return;
|
||||
@@ -73,10 +65,19 @@ namespace EonaCat.Logger.Managers
|
||||
DateTime now = DateTime.UtcNow;
|
||||
|
||||
if (IsRunning && now.Date > _logDate.Date)
|
||||
StopLogging();
|
||||
await StopLoggingAsync().ConfigureAwait(false);
|
||||
|
||||
IsRunning = true;
|
||||
|
||||
CreateLogger();
|
||||
|
||||
Directory.CreateDirectory(Settings.FileLoggerOptions.LogDirectory);
|
||||
|
||||
_logDate = now;
|
||||
}
|
||||
|
||||
private void CreateLogger()
|
||||
{
|
||||
IServiceCollection serviceCollection = new ServiceCollection();
|
||||
serviceCollection.AddLogging(builder => builder.AddEonaCatFileLogger(configuration =>
|
||||
{
|
||||
@@ -95,55 +96,40 @@ namespace EonaCat.Logger.Managers
|
||||
var serviceProvider = serviceCollection.BuildServiceProvider();
|
||||
LoggerProvider = serviceProvider.GetService<ILoggerProvider>();
|
||||
LoggerFactory = serviceProvider.GetService<ILoggerFactory>();
|
||||
|
||||
CategoryName ??= string.Empty;
|
||||
Logger = LoggerFactory.CreateLogger(CategoryName);
|
||||
|
||||
Directory.CreateDirectory(Settings.FileLoggerOptions.LogDirectory);
|
||||
|
||||
_logDate = now;
|
||||
|
||||
Write(now, $"{DllInfo.ApplicationName} started.");
|
||||
Logger = LoggerFactory.CreateLogger(Settings.Id);
|
||||
}
|
||||
|
||||
public void Assert(bool condition, string message)
|
||||
private void InternalWriteAsync(DateTime dateTime, string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null)
|
||||
{
|
||||
if (!condition)
|
||||
throw new EonaCatLoggerAssertionException(message);
|
||||
}
|
||||
|
||||
private void Write(DateTime dateTime, string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(message) || logType < ELogType.INFO)
|
||||
if (string.IsNullOrEmpty(message) || logType == ELogType.NONE || (int)logType >= (int)Settings.MaxLogType)
|
||||
return;
|
||||
|
||||
string currentMessage = message.Length > _settings.MaxMessageLength ? message.Substring(0, _settings.MaxMessageLength) : message;
|
||||
string remainder = message.Length > _settings.MaxMessageLength ? message.Substring(_settings.MaxMessageLength) : "";
|
||||
var messageWithHeader = LogHelper.FormatMessageWithHeader(Settings, logType, message, dateTime);
|
||||
|
||||
var fullMessage = LogHelper.FormatMessageWithHeader(_settings, logType, currentMessage, dateTime);
|
||||
writeToConsole ??= Settings.EnableConsole;
|
||||
if (writeToConsole.Value)
|
||||
{
|
||||
LogHelper.SendToConsole(Settings, logType, messageWithHeader, true);
|
||||
}
|
||||
|
||||
writeToConsole ??= _settings.EnableConsole;
|
||||
LogHelper.SendConsole(_settings, logType, fullMessage, writeToConsole.Value);
|
||||
LogHelper.SendFile(Logger, _settings, logType, fullMessage);
|
||||
LogHelper.SendToSysLogServers(_settings, fullMessage);
|
||||
Task.Run(() => { LogHelper.SendToFile(Logger, Settings, logType, message); });
|
||||
|
||||
if (!string.IsNullOrEmpty(remainder))
|
||||
Write(dateTime, remainder, logType, writeToConsole);
|
||||
Task.Run(() => { LogHelper.SendToSysLogServers(Settings, messageWithHeader); });
|
||||
|
||||
var logMessage = new EonaCatLogMessage
|
||||
{
|
||||
DateTime = dateTime,
|
||||
Message = currentMessage,
|
||||
Message = message,
|
||||
LogType = logType,
|
||||
Origin = string.IsNullOrWhiteSpace(Settings?.LogOrigin) ? "LogManager" : Settings.LogOrigin
|
||||
Origin = string.IsNullOrWhiteSpace(Settings.LogOrigin) ? "LogManager" : Settings.LogOrigin
|
||||
};
|
||||
|
||||
Settings?.OnLogEvent(logMessage);
|
||||
Settings.OnLogEvent(logMessage);
|
||||
}
|
||||
|
||||
public void Reset() => Settings?.ResetLogEvent();
|
||||
public void Reset() => Settings.ResetLogEvent();
|
||||
|
||||
public LogManager(LoggerSettings settings, string serverIp, int serverPort, string id = "EonaCatLogger")
|
||||
public LogManager(LoggerSettings settings, string serverIp, int serverPort)
|
||||
{
|
||||
if (string.IsNullOrEmpty(serverIp))
|
||||
throw new ArgumentNullException(nameof(serverIp));
|
||||
@@ -152,18 +138,16 @@ namespace EonaCat.Logger.Managers
|
||||
throw new ArgumentException("Server port must be zero or greater.");
|
||||
|
||||
settings.SysLogServers = new List<SyslogServer>
|
||||
{
|
||||
new SyslogServer(serverIp, serverPort)
|
||||
};
|
||||
{
|
||||
new SyslogServer(serverIp, serverPort)
|
||||
};
|
||||
|
||||
Id = id;
|
||||
Settings = settings;
|
||||
SetupLogManager();
|
||||
}
|
||||
|
||||
public LogManager(LoggerSettings settings, string id = "EonaCatLogger")
|
||||
public LogManager(LoggerSettings settings)
|
||||
{
|
||||
Id = id;
|
||||
Settings = settings;
|
||||
SetupFileLogger(settings, null, true);
|
||||
SetupLogManager();
|
||||
@@ -193,25 +177,31 @@ namespace EonaCat.Logger.Managers
|
||||
|
||||
private void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
|
||||
{
|
||||
Dispose(true);
|
||||
Dispose();
|
||||
}
|
||||
|
||||
private void ProcessExit(object sender, EventArgs e)
|
||||
{
|
||||
Dispose(true);
|
||||
Dispose();
|
||||
}
|
||||
|
||||
private void StopLogging()
|
||||
private Task StopLoggingAsync()
|
||||
{
|
||||
IsRunning = false;
|
||||
Write(DateTime.UtcNow, $"{DllInfo.ApplicationName} stopped.");
|
||||
Task.Delay(500, _tokenSource.Token);
|
||||
InternalWriteAsync(DateTime.UtcNow, $"{DllInfo.ApplicationName} stopped.");
|
||||
return Task.Delay(500);
|
||||
}
|
||||
|
||||
public LogManager(string logFolder = null, bool defaultPrefix = true)
|
||||
public void DeleteCurrentLogFile()
|
||||
{
|
||||
SetupFileLogger(null, logFolder, defaultPrefix);
|
||||
SetupLogManager();
|
||||
if (CurrentLogFile != null)
|
||||
File.Delete(CurrentLogFile);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
DisposeAsync(true).GetAwaiter().GetResult();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public void Write(Exception exception, string module = null, string method = null, bool criticalException = false, bool? writeToConsole = null)
|
||||
@@ -227,25 +217,12 @@ namespace EonaCat.Logger.Managers
|
||||
if (logType == ELogType.NONE)
|
||||
return;
|
||||
|
||||
DateTime now = DateTime.UtcNow;
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
if (!IsRunning)
|
||||
StartNewLog();
|
||||
StartNewLogAsync().ConfigureAwait(false);
|
||||
|
||||
Write(now, message, logType, writeToConsole);
|
||||
}
|
||||
|
||||
public void DeleteCurrentLogFile()
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(CurrentLogFile))
|
||||
File.Delete(CurrentLogFile);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
InternalWriteAsync(now, message, logType, writeToConsole);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user