我在c#解决方案中使用Log4net,它在一个解决方案中包含3个项目。 我想使用此记录器的相同实例登录到一个文件。 这是App.Config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<appender name="TestAppender" type="log4net.Appender.RollingFileAppender" >
<file value="C:\log\MyTestAppender.log" />
<!--<file value="../../test/MyTestAppender.log" />-->
<encoding value="utf-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %type.%method - %message%n" />
</layout>
</appender>
<root>
<level value="All" />
<!-- If the following line is not included the log file will not be created even if log4net is configured with this file. -->
<appender-ref ref="TestAppender" />
</root>
</log4net>
</configuration>
我这样做是为了记录
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我应该在哪里放置这些信息,以便从所有项目登录相同的日志文件。 非常感谢
答案 0 :(得分:1)
您应该在静态构造函数中加载配置文件。
喜欢这个
static LogHelper()
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new System.IO.FileInfo(@"AppConfig\log4net.config"));
}
配置文件应该是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Register log4net -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!--log configs -->
</log4net>
</configuration>
答案 1 :(得分:0)
你可以这样做,我的意思是说在静态类上创建并创建日志实例,并在该静态类上调用log方法,它只使用一个日志实例。
public static class Utility
{
private static ILog log = LogManager.GetLogger("CommonLogger");
public static void LogMessage(string message)
{
Task.Factory.StartNew(() => log.Info(message));
}
}
或者你也可以使用Singleton
模式来实现这个
public Class LogSingleTon
{
private static readonly Lazy<LogSingleTon> lazy =
new Lazy<LogSingleTon>(() => new LogSingleTon());
public static LogSingleTon Instance { get { return lazy.Value; } }
private ILog log ;
private LogSingleTon()
{
log = LogManager.GetLogger("CommonLogger")
}
public void LogMessage(string message)
{
Task.Factory.StartNew(() => log.Info(message));
}
}
答案 2 :(得分:0)
我认为您使用依赖注入框架,您还可以将Log4net记录器注册为(一个)实例,并将其注入您想要使用它的任何位置。
E.g。使用Autofac:
var builder = new ContainerBuilder();
// Log4net
var logger = LogManager.GetLogger("[Whatever name your would like to use for your logger]");
builder.RegisterInstance(logger);