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);
        }
Esempio n. 4
0
        /// <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);
        }