Set log name in log4net application

I have a MyLogger class where I use log4net. How can I change my appender to save the log in a specific log name (I want to set it using the logName parameter).

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> 

This is myAppender. Now he writes in the general application 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> 
+4
source share
2 answers

it works:

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

I think you are looking for:

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

More information can be found here . If you do something like this, you can see this problem . This is mainly about registering your application so that the event log knows about it.

Change (configuration by code):

Not tested, but this should have done the trick:

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

You can add a few tests to make sure there is only one EventLogAppender, but you probably don't need to.

+2
source

All Articles