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>
|
||||
internal sealed class ServiceEventLogAppender : AppenderSkeleton
|
||||
{
|
||||
private readonly IServiceEventLogProvider provider;
|
||||
private readonly WrapperServiceEventLogProvider provider;
|
||||
|
||||
internal ServiceEventLogAppender(IServiceEventLogProvider provider)
|
||||
internal ServiceEventLogAppender(WrapperServiceEventLogProvider provider)
|
||||
{
|
||||
this.provider = provider;
|
||||
}
|
||||
|
@ -21,8 +21,20 @@ namespace WinSW.Logging
|
|||
{
|
||||
var eventLog = this.provider.Locate();
|
||||
|
||||
// We write the event iff the provider is ready
|
||||
eventLog?.WriteEntry(loggingEvent.RenderedMessage, ToEventLogEntryType(loggingEvent.Level));
|
||||
if (eventLog is not null)
|
||||
{
|
||||
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)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/// <summary>
|
||||
/// Implements caching of the WindowsService reference in WinSW.
|
||||
/// </summary>
|
||||
internal sealed class WrapperServiceEventLogProvider : IServiceEventLogProvider
|
||||
internal sealed class WrapperServiceEventLogProvider
|
||||
{
|
||||
public WrapperService? Service { get; set; }
|
||||
|
||||
|
|
|
@ -1162,7 +1162,7 @@ namespace WinSW
|
|||
}
|
||||
|
||||
/// <exception cref="FileNotFoundException" />
|
||||
private static XmlServiceConfig LoadConfigAndInitLoggers(string? path, bool enableConsoleLogging)
|
||||
private static XmlServiceConfig LoadConfigAndInitLoggers(string? path, bool inConsoleMode)
|
||||
{
|
||||
if (TestConfig != null)
|
||||
{
|
||||
|
@ -1177,8 +1177,11 @@ namespace WinSW
|
|||
var consoleLogLevel = Level.Info;
|
||||
var eventLogLevel = Level.Warn;
|
||||
|
||||
// console log
|
||||
if (enableConsoleLogging)
|
||||
#if NET
|
||||
var repository = LogManager.GetRepository(Assembly.GetExecutingAssembly());
|
||||
#endif
|
||||
|
||||
if (inConsoleMode)
|
||||
{
|
||||
var consoleAppender = new WinSWConsoleAppender
|
||||
{
|
||||
|
@ -1190,10 +1193,25 @@ namespace WinSW
|
|||
|
||||
BasicConfigurator.Configure(
|
||||
#if NET
|
||||
LogManager.GetRepository(Assembly.GetExecutingAssembly()),
|
||||
repository,
|
||||
#endif
|
||||
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;
|
||||
if (path != null)
|
||||
|
@ -1213,7 +1231,7 @@ namespace WinSW
|
|||
|
||||
// .wrapper.log
|
||||
string wrapperLogPath = Path.Combine(config.LogDirectory, config.BaseName + ".wrapper.log");
|
||||
var wrapperLog = new FileAppender
|
||||
var fileAppender = new FileAppender
|
||||
{
|
||||
AppendToFile = true,
|
||||
File = wrapperLogPath,
|
||||
|
@ -1223,22 +1241,13 @@ namespace WinSW
|
|||
LockingModel = new FileAppender.MinimalLock(),
|
||||
Layout = new PatternLayout("%date %-5level - %message%newline"),
|
||||
};
|
||||
wrapperLog.ActivateOptions();
|
||||
|
||||
// event log
|
||||
var systemEventLogger = new ServiceEventLogAppender(WrapperService.eventLogProvider)
|
||||
{
|
||||
Name = "Wrapper event log",
|
||||
Threshold = eventLogLevel,
|
||||
};
|
||||
systemEventLogger.ActivateOptions();
|
||||
fileAppender.ActivateOptions();
|
||||
|
||||
BasicConfigurator.Configure(
|
||||
#if NET
|
||||
LogManager.GetRepository(Assembly.GetExecutingAssembly()),
|
||||
repository,
|
||||
#endif
|
||||
wrapperLog,
|
||||
systemEventLogger);
|
||||
fileAppender);
|
||||
|
||||
return config;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue