代码之家  ›  专栏  ›  技术社区  ›  George Mauer

从代码而不是配置中为log4net启用文件日志记录

  •  17
  • George Mauer  · 技术社区  · 16 年前

        public class TestAppender : AppenderSkeleton {
            public event Action<LoggingEvent> 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);
            }
    }
    
    3 回复  |  直到 11 年前
        1
  •  42
  •   Njal Gjermundshaug    15 年前

    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!");
    
        2
  •  2
  •   Ty.    16 年前

    只是猜测一下。..

    您的程序集中是否定义了XmlConfiguration?

    你在测试项目中忘记了吗?

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

        3
  •  0
  •   George Mauer    16 年前

    log4net.Config.BasicConfigurator.Configure(_appender);
    

    here .

    推荐文章