2010-08-20 53 views
4

我有class MyLogger,我使用log4net。我怎样才能修改我的appender保存日志特定的日志名称(我想通过参数logName来设置它)。在log4net的appender中设置日志名称

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> 
+0

是'logName'全部到应用程序,或者你希望能够在运行时改变它呢? – 2010-08-20 19:59:39

+0

我想在运行时更改它 – user278618 2010-08-21 04:52:29

回答

2

这个工程:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" /> 
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,但可能你不需要费心去做。

+0

我想在运行时更改此值 – user278618 2010-08-21 04:53:09

+0

我在更改后缺少ActivateOptions()函数调用。谢谢! – deadlydog 2015-03-03 23:33:36