[英]Castle logging facility for log4net with a fluent log4net configuration
I have a fluent log4net
configuration.It is in a class called log4netConfigSetup.cs
. 我有一个流畅的
log4net
配置,它位于一个名为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
: 在我的Castle安装程序类中,当您添加如下所示示例的日志记录工具时,它将在
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? 如何使它查找我拥有的流畅的配置类,而不是用于
log4net
配置的配置文件或xml文件?
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. 您可以通过实现ILoggerFactory来实现此目的 ,就像这个部分示例:您将需要实现要使用的ILogger接口的所有部分。
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; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.