mirror of https://github.com/winsw/winsw
Ensure basic event logging
parent
9d0851b3b0
commit
cb8ded23c7
|
@ -1,14 +0,0 @@
|
||||||
namespace WinSW.Logging
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates that the class may reference the event log
|
|
||||||
/// </summary>
|
|
||||||
internal interface IServiceEventLogProvider
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Locates Event Log for the service.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>Event Log or null if it is not avilable</returns>
|
|
||||||
IServiceEventLog? Locate();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -10,9 +10,9 @@ namespace WinSW.Logging
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal sealed class ServiceEventLogAppender : AppenderSkeleton
|
internal sealed class ServiceEventLogAppender : AppenderSkeleton
|
||||||
{
|
{
|
||||||
private readonly IServiceEventLogProvider provider;
|
private readonly WrapperServiceEventLogProvider provider;
|
||||||
|
|
||||||
internal ServiceEventLogAppender(IServiceEventLogProvider provider)
|
internal ServiceEventLogAppender(WrapperServiceEventLogProvider provider)
|
||||||
{
|
{
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,20 @@ namespace WinSW.Logging
|
||||||
{
|
{
|
||||||
var eventLog = this.provider.Locate();
|
var eventLog = this.provider.Locate();
|
||||||
|
|
||||||
// We write the event iff the provider is ready
|
if (eventLog is not null)
|
||||||
eventLog?.WriteEntry(loggingEvent.RenderedMessage, ToEventLogEntryType(loggingEvent.Level));
|
{
|
||||||
|
eventLog.WriteEntry(loggingEvent.RenderedMessage, ToEventLogEntryType(loggingEvent.Level));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var backupLog = new EventLog("Application", ".", "Windows Service Wrapper");
|
||||||
|
backupLog.WriteEntry(loggingEvent.RenderedMessage, ToEventLogEntryType(loggingEvent.Level));
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static EventLogEntryType ToEventLogEntryType(Level level)
|
private static EventLogEntryType ToEventLogEntryType(Level level)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implements caching of the WindowsService reference in WinSW.
|
/// Implements caching of the WindowsService reference in WinSW.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal sealed class WrapperServiceEventLogProvider : IServiceEventLogProvider
|
internal sealed class WrapperServiceEventLogProvider
|
||||||
{
|
{
|
||||||
public WrapperService? Service { get; set; }
|
public WrapperService? Service { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1162,7 +1162,7 @@ namespace WinSW
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <exception cref="FileNotFoundException" />
|
/// <exception cref="FileNotFoundException" />
|
||||||
private static XmlServiceConfig LoadConfigAndInitLoggers(string? path, bool enableConsoleLogging)
|
private static XmlServiceConfig LoadConfigAndInitLoggers(string? path, bool inConsoleMode)
|
||||||
{
|
{
|
||||||
if (TestConfig != null)
|
if (TestConfig != null)
|
||||||
{
|
{
|
||||||
|
@ -1177,8 +1177,11 @@ namespace WinSW
|
||||||
var consoleLogLevel = Level.Info;
|
var consoleLogLevel = Level.Info;
|
||||||
var eventLogLevel = Level.Warn;
|
var eventLogLevel = Level.Warn;
|
||||||
|
|
||||||
// console log
|
#if NET
|
||||||
if (enableConsoleLogging)
|
var repository = LogManager.GetRepository(Assembly.GetExecutingAssembly());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (inConsoleMode)
|
||||||
{
|
{
|
||||||
var consoleAppender = new WinSWConsoleAppender
|
var consoleAppender = new WinSWConsoleAppender
|
||||||
{
|
{
|
||||||
|
@ -1190,10 +1193,25 @@ namespace WinSW
|
||||||
|
|
||||||
BasicConfigurator.Configure(
|
BasicConfigurator.Configure(
|
||||||
#if NET
|
#if NET
|
||||||
LogManager.GetRepository(Assembly.GetExecutingAssembly()),
|
repository,
|
||||||
#endif
|
#endif
|
||||||
consoleAppender);
|
consoleAppender);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var eventLogAppender = new ServiceEventLogAppender(WrapperService.eventLogProvider)
|
||||||
|
{
|
||||||
|
Name = "Wrapper event log",
|
||||||
|
Threshold = eventLogLevel,
|
||||||
|
};
|
||||||
|
eventLogAppender.ActivateOptions();
|
||||||
|
|
||||||
|
BasicConfigurator.Configure(
|
||||||
|
#if NET
|
||||||
|
repository,
|
||||||
|
#endif
|
||||||
|
eventLogAppender);
|
||||||
|
}
|
||||||
|
|
||||||
XmlServiceConfig config;
|
XmlServiceConfig config;
|
||||||
if (path != null)
|
if (path != null)
|
||||||
|
@ -1213,7 +1231,7 @@ namespace WinSW
|
||||||
|
|
||||||
// .wrapper.log
|
// .wrapper.log
|
||||||
string wrapperLogPath = Path.Combine(config.LogDirectory, config.BaseName + ".wrapper.log");
|
string wrapperLogPath = Path.Combine(config.LogDirectory, config.BaseName + ".wrapper.log");
|
||||||
var wrapperLog = new FileAppender
|
var fileAppender = new FileAppender
|
||||||
{
|
{
|
||||||
AppendToFile = true,
|
AppendToFile = true,
|
||||||
File = wrapperLogPath,
|
File = wrapperLogPath,
|
||||||
|
@ -1223,22 +1241,13 @@ namespace WinSW
|
||||||
LockingModel = new FileAppender.MinimalLock(),
|
LockingModel = new FileAppender.MinimalLock(),
|
||||||
Layout = new PatternLayout("%date %-5level - %message%newline"),
|
Layout = new PatternLayout("%date %-5level - %message%newline"),
|
||||||
};
|
};
|
||||||
wrapperLog.ActivateOptions();
|
fileAppender.ActivateOptions();
|
||||||
|
|
||||||
// event log
|
|
||||||
var systemEventLogger = new ServiceEventLogAppender(WrapperService.eventLogProvider)
|
|
||||||
{
|
|
||||||
Name = "Wrapper event log",
|
|
||||||
Threshold = eventLogLevel,
|
|
||||||
};
|
|
||||||
systemEventLogger.ActivateOptions();
|
|
||||||
|
|
||||||
BasicConfigurator.Configure(
|
BasicConfigurator.Configure(
|
||||||
#if NET
|
#if NET
|
||||||
LogManager.GetRepository(Assembly.GetExecutingAssembly()),
|
repository,
|
||||||
#endif
|
#endif
|
||||||
wrapperLog,
|
fileAppender);
|
||||||
systemEventLogger);
|
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue