Вопрос по .net, log4net, c# – Включите ведение журнала для log4net из кода, а не из конфигурации

17

Почему в мире не проходит следующий тест? (это в xunit) яМы пробовали это с разными приложениями, и он никогда ничего не пишет, хотя журнал кажется готовым к записи. В конце концов я создал свой собственный appender, чтобы проверить это.

    public class TestAppender : AppenderSkeleton {
        public event Action AppendCalled = delegate { };
        protected override void Append(LoggingEvent loggingEvent) {
            AppendCalled(loggingEvent);
        }
    }
    public class Class1 {
        private TestAppender _appender = new TestAppender();
        public Class1() {
            log4net.Util.LogLog.InternalDebugging = true;
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
            Logger rootLogger = hierarchy.Root;
            rootLogger.Level = Level.All;
            Logger coreLogger = hierarchy.GetLogger("abc") as Logger;
            coreLogger.Level = Level.All;

            coreLogger.Parent = rootLogger;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%logger - %message %newline";
            patternLayout.ActivateOptions();
            _appender.Layout = patternLayout;
            _appender.ActivateOptions();
            coreLogger.AddAppender(_appender);            
        }
        [Fact]
        public void Test() {
            bool called = false;
            _appender.AppendCalled += e => called = true;
            var log = LogManager.GetLogger("abc");
            log.Debug("This is a debugging message");
            Thread.Sleep(TimeSpan.FromSeconds(2));
            log.Info("This is an info message");
            Thread.Sleep(TimeSpan.FromSeconds(2));
            log.Warn("This is a warning message");
            Thread.Sleep(TimeSpan.FromSeconds(2));
            log.Error("This is an error message");
            Assert.True(called);
        }
}
Какую информацию вы получите в тесте? Или просто кажется, что ничего не называется? Ty.
Добавить никогда не называется - понятия не имею почему. Конфигурация log4net по-прежнему остается для меня чем-то вроде черного ящика, даже после использования его в нескольких проектах. George Mauer

Ваш Ответ

3   ответа
0

не могу сказать, почему приведенный выше код неэто не работает, но я получил log4net для правильной настройки и использования моего appender, заменив весь код конфигурации на:

log4net.Config.BasicConfigurator.Configure(_appender);

ОтВот.

42

чтобы настроить log4net из кода. Работает отлично!

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.RemoveAllAppenders(); /*Remove any other appenders*/

FileAppender fileAppender = new FileAppender();
fileAppender.AppendToFile = true;
fileAppender.LockingModel = new FileAppender.MinimalLock();
fileAppender.File = Server.MapPath("/") + "log.txt";
PatternLayout pl = new PatternLayout();
pl.ConversionPattern = "%d [%2%t] %-5p [%-10c]   %m%n%n";
pl.ActivateOptions();
fileAppender.Layout = pl;
fileAppender.ActivateOptions();

log4net.Config.BasicConfigurator.Configure(fileAppender);

//Test logger
ILog log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Debug("Testing!");
Я знаю, что это старый пост, но вам нужно сделать какие-либо настройки XML в web.config? Evan Layman
вау спасибо, я никогда не знал о шаге BasicConfigurator.Configure George Mauer
2

У вас есть XmlConfiguration, определенная в вашей сборке?

Вы забыли это в своем тестовом проекте?

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Это обычно сжигает меня время от времени.

Хороший звонок, я обычно использую log4net Castle Windsor интеграции, поэтому я забыл - но яЯ вообще не использую XML-файл! George Mauer

Похожие вопросы