我有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>
答案 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}" />