在log4net的appender中设置日志名称

时间:2010-08-20 12:03:52

标签: c# log4net log4net-configuration

我有MyLogger类,我使用log4net。如何修改我的appender以保存特定logname中的日志(我想通过参数logName设置它)。

public void AddEntry(string source, string logName, string contextInfo, string message, EventLogEntryType eventType)
        {

             log4net.ILog Log = log4net.LogManager.GetLogger(source);

             Log.Error(String.Format("Context Info: {0}{1}{2}{3}", contextInfo, Environment.NewLine, Environment.NewLine, message));

        }

<log4net>
  <root>
    <priority value="ALL" />
     <appender-ref ref="EventLogAppender" />
  </root>

这是myAppender。现在它写入常见的logtype Application。

  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger (%property{myContext}) [%level]- %message%newline" />
    </layout>
  </appender>
</log4net>

2 个答案:

答案 0 :(得分:2)

我认为你在寻找的是:

<param name="LogName" value="MyLog" />

可以找到更多信息here。如果您执行此类操作,您可能还需要查看this issue。基本上这是关于注册您的应用程序,以便事件日志知道它。

修改(按代码配置):

没有测试,但应该这样做:

foreach (AppenderSkeleton appender in this.Logger.Repository.GetAppenders())
{
    var eventlogAppender = appender as EventLogAppender;
    if (eventlogAppender != null)
    {
        eventlogAppender.LogName = "MyLog";
        eventlogAppender.ActivateOptions();
        break;
    }
 }

您可以添加一些测试来验证只有一个EventLogAppender,但您可能不需要这么做。

答案 1 :(得分:2)

这有效:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" />