Skip to content

Commit

Permalink
MultiWindow-NetCore-Demo - log4net logging; InstanceValidator from Gl…
Browse files Browse the repository at this point in the history
…ueNetCore.0.0.45
  • Loading branch information
stanislav-peichev committed Jan 28, 2025
1 parent 282ce65 commit ef976a4
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 3 deletions.
30 changes: 30 additions & 0 deletions multiwindow-netcore-demo/MultiWindowWPFDemo/App.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>

<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<logger name="GlueInterop.Transport">
<level value="DEBUG" />
</logger>
<appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="logs\MultiWindowWPFDemo-%env{ComputerName}-%date{yyyyMMdd-HHmmss}.log" />
<appendToFile value="true" />
<maximumFileSize value="20MB" />
<maxSizeRollBackups value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
101 changes: 101 additions & 0 deletions multiwindow-netcore-demo/MultiWindowWPFDemo/Log4NetLoggerFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
using System;
using System.Threading;
using Glue.Logging;
using log4net;
using log4net.Core;

namespace MultiWindowWPFDemo
{
public class Log4NetLoggerFactory : IGlueLoggerFactory
{
public IGlueLog GetLogger(string name)
{
return new Log4NetGlueLog(LogManager.GetLogger(name));
}

public IGlueLog GetLogger(Type type)
{
return new Log4NetGlueLog(LogManager.GetLogger(type));
}

public static Level GetLog4NetLevel(GlueLogLevel level)
{
return level switch
{
GlueLogLevel.All => Level.All,
GlueLogLevel.Trace => Level.Trace,
GlueLogLevel.Debug => Level.Debug,
GlueLogLevel.Info => Level.Info,
GlueLogLevel.Warn => Level.Warn,
GlueLogLevel.Error => Level.Error,
GlueLogLevel.Fatal => Level.Fatal,
GlueLogLevel.Off => Level.Off,
_ => throw new ArgumentOutOfRangeException(nameof(level), level, null)
};
}

public class Log4NetGlueLog : IGlueLog
{
private readonly ILog log_;

public Log4NetGlueLog(ILog log)
{
log_ = log;
}

public void Trace(Func<string> messageCtor, Exception e = null)
{
if (log_.Logger.IsEnabledFor(Level.Trace))
{
log_.Logger.Log(new LoggingEvent(new LoggingEventData
{
Level = Level.Trace,
Message = messageCtor(),
LoggerName = log_.Logger.Name,
ThreadName = Thread.CurrentThread.Name,
TimeStampUtc = DateTime.UtcNow,
ExceptionString = e?.ToString()
}));
}
}

public void Info(string message, Exception e = null)
{
log_.Info(message, e);
}

public void Error(string message, Exception e = null)
{
log_.Error(message, e);
}

public void Debug(string message, Exception e = null)
{
log_.Debug(message, e);
}

public void Debug(Func<string> message, Exception e = null)
{
if (log_.IsDebugEnabled)
{
log_.Debug(message(), e);
}
}

public bool IsEnabledFor(GlueLogLevel level)
{
return log_.Logger.IsEnabledFor(GetLog4NetLevel(level));
}

public void Warn(string message, Exception e = null)
{
log_.Warn(message, e);
}

public void Log(GlueLogLevel level, string message, Exception exception)
{
log_.Logger.Log(typeof(LogImpl), GetLog4NetLevel(level), message, exception);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
using System.Windows.Media;
using System.Windows.Shapes;
using Glue;
using Glue.GDStarting;
using Glue.Helpers;
using Glue.Logging;
using Glue.Transport;
using Glue.Windows;
using log4net.Config;

namespace MultiWindowWPFDemo
{
Expand Down Expand Up @@ -45,15 +46,18 @@ public MainWindow()
ColorSelector.SelectedIndex = restoreState.SelectedIndex;
}, Dispatcher.AsGlueDispatcher());

XmlConfigurator.Configure();

Glue42.InitializeGlueAndTrack(new InitializeOptions
{
ApplicationName = "MultiWindowDemoNETCore",
LoggerFactory = DebugLoggerFactory.Instance,
LoggerFactory = new Log4NetLoggerFactory(),
AdvancedOptions = new AdvancedOptions
{
InstanceValidator = config => config.TryPidAndPort(),
GDInstanceSelector = contexts =>
{
// choose some instance to connect to
return contexts.FirstOrDefault().AsCompletedTask();
},
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="GlueNetCore" Version="0.0.43" />
<PackageReference Include="GlueNetCore" Version="0.0.45" />
<PackageReference Include="log4net" Version="3.0.3" />
</ItemGroup>
</Project>

0 comments on commit ef976a4

Please sign in to comment.