From: <fab...@us...> - 2010-08-09 11:33:26
|
Revision: 5129 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5129&view=rev Author: fabiomaulo Date: 2010-08-09 11:33:20 +0000 (Mon, 09 Aug 2010) Log Message: ----------- bye bye log4net reference :( Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Logging.cs trunk/nhibernate/src/NHibernate/NHibernate.build trunk/nhibernate/src/NHibernate/NHibernate.csproj Modified: trunk/nhibernate/src/NHibernate/Logging.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Logging.cs 2010-08-08 23:08:04 UTC (rev 5128) +++ trunk/nhibernate/src/NHibernate/Logging.cs 2010-08-09 11:33:20 UTC (rev 5129) @@ -1,6 +1,5 @@ using System; using System.Linq.Expressions; -using log4net; namespace NHibernate { @@ -31,38 +30,73 @@ void WarnFormat(string format, params object[] args); } + public interface ILoggerFactory + { + ILogger LoggerFor(string keyName); + ILogger LoggerFor(System.Type type); + } + public class LogggerProvider { - private readonly Func<string, ILogger> loggerByKeyGetter; - private readonly Func<System.Type, ILogger> loggerByTypeGetter; + private readonly ILoggerFactory loggerFactory; private static LogggerProvider instance; + static LogggerProvider() { - SetLoggersFactoryDelegates(key => new Log4NetLogger(LogManager.GetLogger(key)), type => new Log4NetLogger(LogManager.GetLogger(type))); + SetLoggersFactory(new Log4NetLoggerFactory()); } - public static void SetLoggersFactoryDelegates(Func<string, ILogger> loggerByKeyGetter, Func<System.Type, ILogger> loggerByTypeGetter) + public static void SetLoggersFactory(ILoggerFactory loggerFactory) { - instance = new LogggerProvider(loggerByKeyGetter, loggerByTypeGetter); + instance = new LogggerProvider(loggerFactory); } - private LogggerProvider(Func<string, ILogger> loggerByKeyGetter, Func<System.Type, ILogger> loggerByTypeGetter) + private LogggerProvider(ILoggerFactory loggerFactory) { - this.loggerByKeyGetter = loggerByKeyGetter; - this.loggerByTypeGetter = loggerByTypeGetter; + this.loggerFactory = loggerFactory; } public static ILogger LoggerFor(string keyName) { - return instance.loggerByKeyGetter(keyName); + return instance.loggerFactory.LoggerFor(keyName); } public static ILogger LoggerFor(System.Type type) { - return instance.loggerByTypeGetter(type); + return instance.loggerFactory.LoggerFor(type); } } + public class Log4NetLoggerFactory: ILoggerFactory + { + private static readonly System.Type LogManagerType = System.Type.GetType("log4net.LogManager, log4net"); + private static readonly Func<string, object> GetLoggerByNameDelegate; + private static readonly Func<System.Type, object> GetLoggerByTypeDelegate; + static Log4NetLoggerFactory() + { + GetLoggerByNameDelegate = GetGetLoggerMethodCall<string>(); + GetLoggerByTypeDelegate = GetGetLoggerMethodCall<System.Type>(); + } + public ILogger LoggerFor(string keyName) + { + return new Log4NetLogger(GetLoggerByNameDelegate(keyName)); + } + + public ILogger LoggerFor(System.Type type) + { + return new Log4NetLogger(GetLoggerByTypeDelegate(type)); + } + + private static Func<TParameter, object> GetGetLoggerMethodCall<TParameter>() + { + var method = LogManagerType.GetMethod("GetLogger", new[] { typeof(TParameter) }); + ParameterExpression resultValue; + ParameterExpression keyParam = Expression.Parameter(typeof(TParameter), "key"); + MethodCallExpression methodCall = Expression.Call(null, method, new Expression[] { resultValue = keyParam }); + return Expression.Lambda<Func<TParameter, object>>(methodCall, new[] { resultValue }).Compile(); + } + } + public class Log4NetLogger: ILogger { private static readonly System.Type ILogType = System.Type.GetType("log4net.ILog, log4net"); Modified: trunk/nhibernate/src/NHibernate/NHibernate.build =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.build 2010-08-08 23:08:04 UTC (rev 5128) +++ trunk/nhibernate/src/NHibernate/NHibernate.build 2010-08-09 11:33:20 UTC (rev 5129) @@ -23,7 +23,6 @@ <include name="System.Data.OracleClient" /> <include name="System.Web.dll" /> <include name="Iesi.Collections.dll" /> - <include name="log4net.dll" /> <include name="Antlr3.Runtime.dll" /> <include name="Remotion.dll" /> <include name="Remotion.Data.Linq.dll" /> Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-08-08 23:08:04 UTC (rev 5128) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-08-09 11:33:20 UTC (rev 5129) @@ -62,10 +62,6 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\..\lib\net\3.5\Iesi.Collections.dll</HintPath> </Reference> - <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\lib\net\3.5\log4net.dll</HintPath> - </Reference> <Reference Include="Remotion.Data.Linq, Version=1.13.41.2, Culture=neutral, PublicKeyToken=cab60358ab4081ea"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\lib\net\3.5\Remotion.Data.Linq.dll</HintPath> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |