Migrated the legacy VB.NET Windows Service to a modern C# Worker Service targeting .NET Framework 4.6.2. Key changes include: - Added `Microsoft.Extensions.Hosting.WindowsServices`, `NLog`, and `Quartz` for logging and scheduling. - Introduced `LogConfigFactory` to bridge `ServiceConfig` and `LogConfig` for Quartz jobs. - Rewrote `Worker` to handle the full service lifecycle, including database connection, temp file management, and scheduler initialization. - Implemented `SchedulerFinishEnvelope` and `SchedulerEnvelopeTaskApi` for Quartz job scheduling. - Created `TempFiles` for service-level temp file management. - Configured `NLog` for file and console logging. - Updated `appsettings.json` for connection strings and service-specific configuration. - Replaced legacy `ProjectInstaller` with `AddWindowsService()` for SCM integration.
61 lines
2.2 KiB
C#
61 lines
2.2 KiB
C#
using Quartz.Logging;
|
|
using QuartzLogLevel = Quartz.Logging.LogLevel;
|
|
|
|
namespace EnvelopeGenerator.Service;
|
|
|
|
/// <summary>
|
|
/// Bridges Quartz's <see cref="ILogProvider"/> to <see cref="ILogger"/>.
|
|
/// Mirrors the legacy <c>LogProvider.vb</c> behavior.
|
|
/// <c>OpenNestedContext</c> and <c>OpenMappedContext</c> are not implemented (same as legacy).
|
|
/// </summary>
|
|
internal sealed class QuartzLogProvider : ILogProvider
|
|
{
|
|
private readonly ILogger _logger;
|
|
|
|
public QuartzLogProvider(ILogger logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
public Logger GetLogger(string name)
|
|
{
|
|
return (level, func, exception, parameters) =>
|
|
{
|
|
if (exception != null)
|
|
{
|
|
_logger.LogError(exception, exception.Message);
|
|
}
|
|
else if (func != null)
|
|
{
|
|
switch (level)
|
|
{
|
|
case QuartzLogLevel.Trace:
|
|
case QuartzLogLevel.Debug:
|
|
if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug))
|
|
_logger.LogDebug(func(), parameters);
|
|
break;
|
|
case QuartzLogLevel.Info:
|
|
if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Information))
|
|
_logger.LogInformation(func(), parameters);
|
|
break;
|
|
case QuartzLogLevel.Warn:
|
|
if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Warning))
|
|
_logger.LogWarning(func(), parameters);
|
|
break;
|
|
case QuartzLogLevel.Error:
|
|
case QuartzLogLevel.Fatal:
|
|
if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Error))
|
|
_logger.LogError(func(), parameters);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
}
|
|
|
|
public IDisposable OpenNestedContext(string message) => throw new NotImplementedException();
|
|
|
|
public IDisposable OpenMappedContext(string key, object value, bool destructure = false) => throw new NotImplementedException();
|
|
}
|