Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Logging refactoring #1377

Merged
Merged
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
11db3de
Performance test for logging.
ngbrown Nov 15, 2017
0fed220
Switch usages of IInternalLogger to IInternalLogger2.
ngbrown Oct 13, 2017
6b50bb9
More completely switch logging over to IInternalLogger
ngbrown Oct 14, 2017
32524e5
Adjust tests that use LogSpy to look at RenderedMessage.
ngbrown Oct 13, 2017
a995b00
Update NHibernate.Example.Web to use new INHibernateLoggerFactory.
ngbrown Oct 14, 2017
870c43f
Use more colorful console sink for NHibernate.Example.Web.
ngbrown Oct 14, 2017
ba50f4e
Greatly simplify new IInternalLogger2 and use extension methods.
ngbrown Oct 18, 2017
a585dd9
Further simplify IInternalLogger2 by moving properties to extension m…
ngbrown Oct 17, 2017
6d0595c
Performance tests for new logging.
ngbrown Nov 15, 2017
51897c1
InternalLogValues as a struct for fewer allocations.
ngbrown Nov 15, 2017
a612260
Other changes as per review.
fredericDelaporte Nov 30, 2017
10ba89f
Rename IInternalLogger2 to INHibernateLogger
ngbrown Nov 30, 2017
ef84ba2
Add notes for obsolete since and some method xml documentation.
ngbrown Nov 30, 2017
8224c7e
Implement logging change in a non-breaking way.
ngbrown Nov 30, 2017
c7687c8
Merge branch 'master' into feature/modern-logging.
ngbrown Dec 2, 2017
8947da5
Merge branch 'master' into feature/modern-logging
fredericDelaporte Dec 4, 2017
9664350
Add some documentation to InternalLogValues
ngbrown Dec 5, 2017
bb4ebcd
Split Logging into separate files.
ngbrown Dec 5, 2017
cd42d45
Implement new functionality in NHibernateLogger and obsolete LoggerPr…
ngbrown Dec 5, 2017
168cece
Add extension overloads to eliminate empty array allocations.
ngbrown Dec 5, 2017
da77cf3
InternalLogLevel and InternalLogValues are renamed to NHibernateLogLe…
ngbrown Dec 5, 2017
a9dcc27
Make NHibernateLogger static.
ngbrown Dec 5, 2017
17a9b96
Fixed typo and sole 'format' parameters to 'message'
ngbrown Dec 5, 2017
f3b5649
Merge remote-tracking branch 'nhibernate/master' into feature/modern-…
ngbrown Dec 5, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ public class AppSessionFactory

public AppSessionFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
{
NHibernate.LoggerProvider.SetLoggersFactory(new NHibernateToMicrosoftLoggerFactory(loggerFactory));
NHibernate.NHibernateLogger.SetLoggersFactory(new NHibernateToMicrosoftLoggerFactory(loggerFactory));

var mapper = new ModelMapper();
mapper.AddMapping<ItemMap>();
127 changes: 18 additions & 109 deletions src/NHibernate.Example.Web/Infrastructure/NHibernateToMicrosoftLogger.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Internal;

namespace NHibernate.Example.Web.Infrastructure
{
public class NHibernateToMicrosoftLogger : IInternalLogger
public class NHibernateToMicrosoftLogger : INHibernateLogger
{
private readonly ILogger _msLogger;

@@ -12,122 +14,29 @@ public NHibernateToMicrosoftLogger(ILogger msLogger)
_msLogger = msLogger ?? throw new ArgumentNullException(nameof(msLogger));
}

public void Error(object message)
private static readonly Dictionary<NHibernateLogLevel, LogLevel> MapLevels = new Dictionary<NHibernateLogLevel, LogLevel>
{
if (IsErrorEnabled)
{
_msLogger.LogError(message.ToString());
}
}

public void Error(object message, Exception exception)
{
if (IsErrorEnabled)
{
_msLogger.LogError(exception, message.ToString());
}
}

public void ErrorFormat(string format, params object[] args)
{
if (IsErrorEnabled)
{
_msLogger.LogError(format, args);
}
}

public void Fatal(object message)
{
if (IsFatalEnabled)
{
_msLogger.LogCritical(message.ToString());
}
}

public void Fatal(object message, Exception exception)
{
if (IsFatalEnabled)
{
_msLogger.LogCritical(exception, message.ToString());
}
}

public void Debug(object message)
{
if (IsDebugEnabled)
{
_msLogger.LogDebug(message.ToString());
}
}
{ NHibernateLogLevel.Trace, LogLevel.Trace },
{ NHibernateLogLevel.Debug, LogLevel.Debug },
{ NHibernateLogLevel.Warn, LogLevel.Warning },
{ NHibernateLogLevel.Error, LogLevel.Error },
{ NHibernateLogLevel.Fatal, LogLevel.Critical },
{ NHibernateLogLevel.None, LogLevel.None },
};

public void Debug(object message, Exception exception)
public void Log(NHibernateLogLevel logLevel, NHibernateLogValues state, Exception exception)
{
if (IsDebugEnabled)
{
_msLogger.LogDebug(exception, message.ToString());
}
_msLogger.Log(MapLevels[logLevel], 0, new FormattedLogValues(state.Format, state.Args), exception, MessageFormatter);
}

public void DebugFormat(string format, params object[] args)
public bool IsEnabled(NHibernateLogLevel logLevel)
{
if (IsDebugEnabled)
{
_msLogger.LogDebug(format, args);
}
return _msLogger.IsEnabled(MapLevels[logLevel]);
}

public void Info(object message)
private static string MessageFormatter(object state, Exception error)
{
if (IsInfoEnabled)
{
_msLogger.LogInformation(message.ToString());
}
return state.ToString();
}

public void Info(object message, Exception exception)
{
if (IsInfoEnabled)
{
_msLogger.LogInformation(exception, message.ToString());
}
}

public void InfoFormat(string format, params object[] args)
{
if (IsInfoEnabled)
{
_msLogger.LogInformation(format, args);
}
}

public void Warn(object message)
{
if (IsWarnEnabled)
{
_msLogger.LogWarning(message.ToString());
}
}

public void Warn(object message, Exception exception)
{
if (IsWarnEnabled)
{
_msLogger.LogWarning(exception, message.ToString());
}
}

public void WarnFormat(string format, params object[] args)
{
if (IsWarnEnabled)
{
_msLogger.LogWarning(format, args);
}
}

public bool IsErrorEnabled => _msLogger.IsEnabled(LogLevel.Error);
public bool IsFatalEnabled => _msLogger.IsEnabled(LogLevel.Critical);
public bool IsDebugEnabled => _msLogger.IsEnabled(LogLevel.Debug);
public bool IsInfoEnabled => _msLogger.IsEnabled(LogLevel.Information);
public bool IsWarnEnabled => _msLogger.IsEnabled(LogLevel.Warning);
}
}
}
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

namespace NHibernate.Example.Web.Infrastructure
{
public class NHibernateToMicrosoftLoggerFactory : NHibernate.ILoggerFactory
public class NHibernateToMicrosoftLoggerFactory : INHibernateLoggerFactory
{
private readonly Microsoft.Extensions.Logging.ILoggerFactory _loggerFactory;

@@ -11,16 +11,16 @@ public NHibernateToMicrosoftLoggerFactory(Microsoft.Extensions.Logging.ILoggerFa
_loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
}

public IInternalLogger LoggerFor(string keyName)
public INHibernateLogger LoggerFor(string keyName)
{
var msLogger = _loggerFactory.CreateLogger(keyName);
return new NHibernateToMicrosoftLogger(msLogger);
}

public IInternalLogger LoggerFor(System.Type type)
public INHibernateLogger LoggerFor(System.Type type)
{
return LoggerFor(
Microsoft.Extensions.Logging.Abstractions.Internal.TypeNameHelper.GetTypeDisplayName(type));
}
}
}
}
2 changes: 2 additions & 0 deletions src/NHibernate.Example.Web/NHibernate.Example.Web.csproj
Original file line number Diff line number Diff line change
@@ -14,6 +14,8 @@
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />
<PackageReference Include="Serilog.AspNetCore" Version="2.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.0" />
</ItemGroup>

<ItemGroup>
10 changes: 10 additions & 0 deletions src/NHibernate.Example.Web/Program.cs
Original file line number Diff line number Diff line change
@@ -7,19 +7,29 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;

namespace NHibernate.Example.Web
{
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();

BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog()
.Build();
}
}
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@ join fetch c.Children gc
where p.Parent is null")
.UniqueResultAsync<Person>());

string hqlQuery = spy.Appender.GetEvents()[0].MessageObject.ToString();
string hqlQuery = spy.Appender.GetEvents()[0].RenderedMessage;
Debug.WriteLine("HQL: " + hqlQuery);
Assertions(result);
}
@@ -62,7 +62,7 @@ join fetch c.Children gc
.SetFetchMode("Children", FetchMode.Join)
.SetFetchMode("Children.Children", FetchMode.Join)
.UniqueResultAsync<Person>());
string criteriaQuery = spy.Appender.GetEvents()[0].MessageObject.ToString();
string criteriaQuery = spy.Appender.GetEvents()[0].RenderedMessage;
Debug.WriteLine("Criteria: " + criteriaQuery);
Assertions(result);
}
2 changes: 1 addition & 1 deletion src/NHibernate.Test/Async/NHSpecificTest/NH1144/Fixture.cs
Original file line number Diff line number Diff line change
@@ -64,7 +64,7 @@ public async Task CanSaveInSingleBatchAsync()
await (tx.CommitAsync());
foreach (LoggingEvent loggingEvent in spy.Appender.GetEvents())
{
if ("Executing batch".Equals(loggingEvent.MessageObject))
if ("Executing batch".Equals(loggingEvent.RenderedMessage))
{
executedBatch = true;
break;
2 changes: 1 addition & 1 deletion src/NHibernate.Test/Async/NHSpecificTest/NH1347/Fixture.cs
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ public async Task BugAsync()
.UniqueResultAsync<A>());
Assert.AreEqual("1", a.Name);
Assert.IsTrue(
spy.Appender.GetEvents()[0].MessageObject.ToString().Contains("limit")
spy.Appender.GetEvents()[0].RenderedMessage.Contains("limit")
);
}

Original file line number Diff line number Diff line change
@@ -51,7 +51,7 @@ public async Task InsertUsesStoredProcAsync()

Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
Assert.AreEqual(1, ifa.Id, "ifa.Id");
Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 1");
Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].RenderedMessage, "Message 1");
using (ISession s = OpenSession())
using (ITransaction t = s.BeginTransaction())
{
@@ -73,7 +73,7 @@ public async Task InsertUsesStoredProcAsync()

Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents");
Assert.AreEqual(2, efa.Id, "efa.Id");
Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 2");
Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].RenderedMessage, "Message 2");
using (ISession s = OpenSession())
using (ITransaction t = s.BeginTransaction())
{
Loading