Skip to content

Commit 6173673

Browse files
committed
Don't split global state for logging.
Fixes #1478
1 parent 83925ee commit 6173673

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

src/NHibernate/Logging.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ public static class NHibernateLogger
5252
private const string nhibernateLoggerConfKey = "nhibernate-logger";
5353
private static INHibernateLoggerFactory _loggerFactory;
5454

55+
#pragma warning disable 618
56+
internal static ILoggerFactory LegacyLoggerFactory { private set; get; }
57+
#pragma warning restore 618
58+
5559
static NHibernateLogger()
5660
{
5761
var nhibernateLoggerClass = GetNhibernateLoggerClass();
@@ -68,9 +72,21 @@ public static void SetLoggersFactory(INHibernateLoggerFactory loggerFactory)
6872
_loggerFactory = loggerFactory ?? new NoLoggingNHibernateLoggerFactory();
6973

7074
#pragma warning disable 618
71-
if (!(loggerFactory is LoggerProvider.LegacyLoggerFactoryAdaptor))
75+
// Also keep global state for obsolete logger
76+
if (loggerFactory == null)
77+
{
78+
LegacyLoggerFactory = new NoLoggingLoggerFactory();
79+
}
80+
else
7281
{
73-
LoggerProvider.SetLoggersFactory(new LoggerProvider.ReverseLegacyLoggerFactoryAdaptor(loggerFactory));
82+
if (loggerFactory is LoggerProvider.LegacyLoggerFactoryAdaptor legacyAdaptor)
83+
{
84+
LegacyLoggerFactory = legacyAdaptor.Factory;
85+
}
86+
else
87+
{
88+
LegacyLoggerFactory = new LoggerProvider.ReverseLegacyLoggerFactoryAdaptor(loggerFactory);
89+
}
7490
}
7591
#pragma warning restore 618
7692
}

src/NHibernate/Logging.obsolete.cs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -82,54 +82,47 @@ public interface ILoggerFactory
8282
[Obsolete("Use NHibernateLogger instead.")]
8383
public class LoggerProvider
8484
{
85-
private static ILoggerFactory _legacyLoggerFactory;
86-
8785
[Obsolete("Implement INHibernateLoggerFactory and use NHibernateLogger.SetLoggersFactory() instead")]
8886
public static void SetLoggersFactory(ILoggerFactory loggerFactory)
8987
{
90-
_legacyLoggerFactory = loggerFactory ?? new NoLoggingLoggerFactory();
91-
92-
if (!(loggerFactory is ReverseLegacyLoggerFactoryAdaptor))
93-
{
94-
var factory = loggerFactory == null || loggerFactory is NoLoggingLoggerFactory
95-
? null
96-
: (INHibernateLoggerFactory) new LegacyLoggerFactoryAdaptor(loggerFactory);
88+
var factory = (loggerFactory == null || loggerFactory is NoLoggingLoggerFactory)
89+
? null
90+
: (INHibernateLoggerFactory) new LegacyLoggerFactoryAdaptor(loggerFactory);
9791

98-
NHibernateLogger.SetLoggersFactory(factory);
99-
}
92+
NHibernateLogger.SetLoggersFactory(factory);
10093
}
10194

10295
[Obsolete("Use NHibernateLogger.For() instead.")]
10396
public static IInternalLogger LoggerFor(string keyName)
10497
{
105-
return _legacyLoggerFactory.LoggerFor(keyName);
98+
return NHibernateLogger.LegacyLoggerFactory.LoggerFor(keyName);
10699
}
107100

108101
[Obsolete("Use NHibernateLogger.For() instead.")]
109102
public static IInternalLogger LoggerFor(System.Type type)
110103
{
111-
return _legacyLoggerFactory.LoggerFor(type);
104+
return NHibernateLogger.LegacyLoggerFactory.LoggerFor(type);
112105
}
113106

114107
// Since 5.1
115108
[Obsolete("Used only in Obsolete functions to thunk to INHibernateLoggerFactory")]
116109
internal class LegacyLoggerFactoryAdaptor : INHibernateLoggerFactory
117110
{
118-
private readonly ILoggerFactory _factory;
111+
internal ILoggerFactory Factory { get; }
119112

120113
public LegacyLoggerFactoryAdaptor(ILoggerFactory factory)
121114
{
122-
_factory = factory;
115+
Factory = factory;
123116
}
124117

125118
public INHibernateLogger LoggerFor(string keyName)
126119
{
127-
return new NHibernateLoggerThunk(_factory.LoggerFor(keyName));
120+
return new NHibernateLoggerThunk(Factory.LoggerFor(keyName));
128121
}
129122

130123
public INHibernateLogger LoggerFor(System.Type type)
131124
{
132-
return new NHibernateLoggerThunk(_factory.LoggerFor(type));
125+
return new NHibernateLoggerThunk(Factory.LoggerFor(type));
133126
}
134127
}
135128

0 commit comments

Comments
 (0)