4

我有 MyLogger 类,我在其中使用 log4net。如何修改我的附加程序以将日志保存在特定的日志名称中(我想通过参数 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>

这是我的Appender。现在它写入通用日志类型应用程序。

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

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

2 回答 2

2

我认为您正在寻找的是:

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

可以在此处找到更多信息。如果你做这样的事情,你可能也想看看这个问题。基本上这是关于注册您的应用程序,以便事件日志知道它。

编辑(按代码配置):

没有测试它,但这应该可以解决问题:

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

您可以添加一些测试来验证是否只有一个 EventLogAppender,但您可能不需要费心去做。

于 2010-08-20T19:34:45.233 回答
2

这有效:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" />
于 2010-08-25T14:02:33.573 回答