I have a fluent log4net
configuration.It is in a class called log4netConfigSetup.cs
. In my Castle installer class, when you add a logging facility like the example shown below it searches for the configuration in app.config
:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(f => f.UseLog4Net());
}
How can I make it look for the fluent config class I have instead of the config file or xml file for the log4net
configuration?
You can do this by implementing ILoggerFactory, like this partial example: you would need to implement all the parts of the ILogger interface you want to use.
using System;
using Castle.Core.Logging;
using Castle.Facilities.Logging;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
using log4net;
namespace Castle_Log4Net
{
public class Installer : IWindsorInstaller
{
public void Install(IWindsorContainer container,
IConfigurationStore store)
{
container.AddFacility<LoggingFacility>
(f => f.LogUsing<Log4NetLoggingFactory>());
}
}
public class Log4NetLoggingFactory : Castle.Core.Logging.ILoggerFactory
{
static Log4NetLoggingFactory()
{
// here you configure log4net from log4netConfigSetup.cs
}
public ILogger Create(Type type)
{
return new Log4NetLogger(type);
}
public ILogger Create(string name)
{
return new Log4NetLogger(name);
}
public ILogger Create(Type type, LoggerLevel level)
{
throw new NotImplementedException();
}
public ILogger Create(string name, LoggerLevel level)
{
throw new NotImplementedException();
}
}
public class Log4NetLogger : Castle.Core.Logging.ILogger
{
private readonly ILog logger;
public Log4NetLogger(Type type)
{
this.logger = LogManager.GetLogger(type);
}
public Log4NetLogger(string name)
{
this.logger = LogManager.GetLogger(name);
}
public ILogger CreateChildLogger(string loggerName)
{
throw new NotImplementedException();
}
public void Debug(string message)
{
logger.Debug(message);
}
public void Debug(Func<string> messageFactory)
{
logger.Debug(messageFactory.Invoke());
}
public void Debug(string message, Exception exception)
{
logger.Debug(message, exception);
}
public void DebugFormat(string format, params object[] args)
{
throw new NotImplementedException();
}
public void DebugFormat(Exception exception, string format, params object[] args)
{
throw new NotImplementedException();
}
public void DebugFormat(IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void DebugFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void Error(string message)
{
throw new NotImplementedException();
}
public void Error(Func<string> messageFactory)
{
throw new NotImplementedException();
}
public void Error(string message, Exception exception)
{
throw new NotImplementedException();
}
public void ErrorFormat(string format, params object[] args)
{
throw new NotImplementedException();
}
public void ErrorFormat(Exception exception, string format, params object[] args)
{
throw new NotImplementedException();
}
public void ErrorFormat(IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void ErrorFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void Fatal(string message)
{
throw new NotImplementedException();
}
public void Fatal(Func<string> messageFactory)
{
throw new NotImplementedException();
}
public void Fatal(string message, Exception exception)
{
throw new NotImplementedException();
}
public void FatalFormat(string format, params object[] args)
{
throw new NotImplementedException();
}
public void FatalFormat(Exception exception, string format, params object[] args)
{
throw new NotImplementedException();
}
public void FatalFormat(IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void FatalFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void Info(string message)
{
throw new NotImplementedException();
}
public void Info(Func<string> messageFactory)
{
throw new NotImplementedException();
}
public void Info(string message, Exception exception)
{
throw new NotImplementedException();
}
public void InfoFormat(string format, params object[] args)
{
throw new NotImplementedException();
}
public void InfoFormat(Exception exception, string format, params object[] args)
{
throw new NotImplementedException();
}
public void InfoFormat(IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void InfoFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void Warn(string message)
{
throw new NotImplementedException();
}
public void Warn(Func<string> messageFactory)
{
throw new NotImplementedException();
}
public void Warn(string message, Exception exception)
{
throw new NotImplementedException();
}
public void WarnFormat(string format, params object[] args)
{
throw new NotImplementedException();
}
public void WarnFormat(Exception exception, string format, params object[] args)
{
throw new NotImplementedException();
}
public void WarnFormat(IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public void WarnFormat(Exception exception, IFormatProvider formatProvider, string format, params object[] args)
{
throw new NotImplementedException();
}
public bool IsDebugEnabled { get; private set; }
public bool IsErrorEnabled { get; private set; }
public bool IsFatalEnabled { get; private set; }
public bool IsInfoEnabled { get; private set; }
public bool IsWarnEnabled { get; private set; }
}
}