登录两个不同的文件log4Net

时间:2013-06-03 08:35:50

标签: asp.net-mvc-3 logging log4net

我想使用log4net在两个不同的文件中写日志,一个在全局日志文件中,另一个在特定用户文件中,为此我在appender中设置了这样的参数

<param name="File" value="D:\Projects\Web\Web\Services\Log\%property{LogFileName}" />

并定义了这样的函数

public void AddInfo(string message)
{
    log4net.GlobalContext.Properties["LogFileName"] = this.UserId + ".txt";
    log4net.Config.XmlConfigurator.Configure();
    Logger.Info(message);

    log4net.GlobalContext.Properties["LogFileName"] = "ServiceLog.txt";
    log4net.Config.XmlConfigurator.Configure();
    Logger.Info(message);        
}

这一切都在发现,每个日志都成功写入两个不同的文件。

我担心的是,如果我们考虑绩效,这种方法是否正确?

对于每个日志,它会将log4net配置两次,是否会对性能产生负面影响?

1 个答案:

答案 0 :(得分:1)

创建两个文件追加器 - 一个用于用户日志(带有模式用于文件名),另一个用于全局日志:

<appender name="UserFileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%property{userId}.txt" />
  ...
</appender>
<appender name="GlobalFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="log.txt" />
  ...
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="UserFileAppender" />
  <appender-ref ref="GlobalFileAppender" />
</root>

然后每个用户只配置一次log4net:

GlobalContext.Properties["userId"] = "Bob";
XmlConfigurator.Configure();

并在您的应用程序中使用记录器。