You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Macarthur Work <ma...@gmail.com> on 2010/09/15 17:03:44 UTC
Problem with eventlog and source ?
I'm using log4net without config file.
When I want add log by System.Diagnostics.EventLog everything goes ok:
if (!EventLog.SourceExists("TestSource"))
{
EventLog.CreateEventSource("TestSource", TestLog");
}
System.Diagnostics.EventLog.WriteEntry("TestSource", "someMessage",
eventType);
But the same action when I using log4net doesn't work:
var log4net = new Log4NetEventLogger("TestSource");
log4net.AddEntry("TestSource", "TestLog", new Exception(),
"additionalMesage", System.Diagnostics.EventLogEntryType.Error);
public class MyLog4NetEventLogger
{
#region Declaration
private readonly string _loggerName;
private ILog _logger;
private bool _clientHasOwnConfiguration;
#endregion Declarations
#region constructor
public MyLog4NetEventLogger(string logerName)
{
_loggerName = logerName;
_logger = LogManager.GetLogger(_loggerName);
if (_logger.Logger.Repository.GetAppenders().Where(a =>
a.Name == "EventLogAppender").Count() == 0)
{
log4net.Config.BasicConfigurator.Configure();
AddAppender(logerName, CreateEventLogAppender());
}
}
#endregion constructor
private static void AddAppender(string loggerName, IAppender
appender)
{
ILog log = LogManager.GetLogger(loggerName);
var l = (log4net.Repository.Hierarchy.Logger)log.Logger;
l.AddAppender(appender);
}
public void AddEntry(string sourceApplicationName, string
logName, Exception ex, string additionalMessage, EventLogEntryType
eventType)
{
SetEventLogAppender(sourceApplicationName, logName);
if (_logger.Logger.Repository.GetAppenders().Where(a =>
a.Name == "EventLogAppender").Count() == 0)
{
throw new NotSupportedException();
}
var smth = _logger.Logger.Repository.GetAppenders();
switch (eventType)
{
case EventLogEntryType.Error:
_logger.Error(additionalMessage, ex);
break;
case EventLogEntryType.Warning:
_logger.Warn(additionalMessage, ex);
break;
case EventLogEntryType.Information:
_logger.Info(additionalMessage, ex);
break;
case EventLogEntryType.SuccessAudit:
case EventLogEntryType.FailureAudit:
throw new NotImplementedException();
default:
throw new ArgumentOutOfRangeException("eventType");
}
}
private static void SetEventLogAppender(string applicationName,
string logName)
{
if (!EventLog.SourceExists(applicationName))
{
EventLog.CreateEventSource(applicationName, logName);
}
var eventLogAppender =
LogManager.GetRepository().GetAppenders()
.Where(appender => appender.Name ==
"EventLogAppender").FirstOrDefault() as EventLogAppender;
if (eventLogAppender != null)
{
eventLogAppender.LogName = logName;
eventLogAppender.ApplicationName = applicationName;
eventLogAppender.ActivateOptions();
}
}
private static IAppender CreateEventLogAppender()
{
var appender = new EventLogAppender { Name =
"EventLogAppender", ApplicationName = "CMNLibrary" };
var layout = new log4net.Layout.PatternLayout
{
ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n"
};
layout.ActivateOptions();
var filter = new log4net.Filter.LoggerMatchFilter {
AcceptOnMatch = true };
var filterDeny = new log4net.Filter.DenyAllFilter();
var filterErrorType = new log4net.Filter.LevelRangeFilter {
AcceptOnMatch = true, LevelMin = Level.Error };
appender.AddFilter(filter);
appender.AddFilter(filterDeny);
appender.AddFilter(filterErrorType);
appender.ActivateOptions();
appender.Layout = layout;
appender.ActivateOptions();
return appender;
}
}
Thanks & Regards,