public void should_ignore_log_entries_that_do_not_contain_an_exception() { var logMessage = Guid.NewGuid().ToString(); var evt = new LoggingEvent(GetType(), LogManager.GetAllRepositories().First(), "OurLogger", Level.Critical, logMessage, null); var uploader = TestUploader.Instance; Err.Configuration.Uploaders.Register(uploader); var sut = new CoderrAppender(); sut.DoAppend(evt); TestUploader.Instance.FindReport(logMessage).Should().BeNull(); }
public void should_include_timestamp() { var logMessage = Guid.NewGuid().ToString(); var ex = new Exception("msg"); var evt = new LoggingEvent(GetType(), LogManager.GetAllRepositories().First(), "OurLogger", Level.Critical, logMessage, ex); var uploader = TestUploader.Instance; Err.Configuration.Uploaders.Register(uploader); var sut = new CoderrAppender(); sut.DoAppend(evt); var entry = TestUploader.Instance.GetReport(logMessage); entry.GetCollectionProperty("LogEntryDetails", "Timestamp").Should().NotBeNull(); }
/// <summary> /// Adds the codeRR logger to log4net. /// </summary> /// <param name="config">config</param> /// <param name="assembly">Assembly that log4net was configured in (typically your entry assembly)</param> /// <exception cref="NotSupportedException"> /// This configuration/version of Log4Net do not allow dynamic adding of appenders. /// Configure this adapter using code instead. See our online documentation for an example. /// </exception> public static void CatchLog4NetExceptions(this CoderrConfiguration config, Assembly assembly) { if (config == null) { throw new ArgumentNullException(nameof(config)); } var root = ((Hierarchy)LogManager.GetRepository(assembly)).Root; if (!(root is IAppenderAttachable attachable)) { throw new NotSupportedException( "This configuration/version of Log4Net do not allow dynamic adding of appenders. Configure this adapter using code instead. See our online documentation for an example."); } var appender = new CoderrAppender(); appender.ActivateOptions(); attachable.AddAppender(appender); }
/// <summary> /// Adds the codeRR logger to log4net. /// </summary> /// <param name="config">config</param> /// <param name="assembly">Assembly that log4net was configured in (typically your entry assembly)</param> /// <exception cref="NotSupportedException"> /// This configuration/version of Log4Net do not allow dynamic adding of appenders. /// Configure this adapter using code instead. See our online documentation for an example. /// </exception> public static void CatchLog4NetExceptions(this CoderrConfiguration config, Assembly assembly) { if (config == null) { throw new ArgumentNullException(nameof(config)); } AddLog4NetLogsToErrorReports(config); var repository = LogManager.GetRepository(assembly) as Hierarchy; if (repository?.Configured != true) { throw new InvalidOperationException("log4net has not yet been configured. It must be configured before activating Coderr, or Coderr wont be able to receive log entries."); } foreach (var rootAppender in repository.Root.Appenders) { if (rootAppender is CoderrAppender) { return; } } if (repository.Root.Appenders.Count == 0) { throw new InvalidOperationException("Did not detect any log4net appenders."); } if (!(repository.Root is IAppenderAttachable attachable)) { throw new NotSupportedException( "This configuration/version of Log4Net do not allow dynamic adding of appenders. Configure this adapter using code instead. See our online documentation for an example."); } var appender = new CoderrAppender(); appender.ActivateOptions(); attachable.AddAppender(appender); }