首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从代码而不是从配置启用log4net的文件日志记录

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

Stack Overflow用户
提问于 2009-09-17 04:32:57
回答 3查看 16.9K关注 0票数 17

为什么下面的测试会失败呢?(它在xunit中)我用不同的附加器尝试过它,它从来没有写过任何东西,尽管日志似乎已经准备好写了。我最终创建了自己的附加器来测试它。

代码语言:javascript
复制
    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);
        }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-13 22:23:59

我总是使用下面的代码从代码中配置log4net。效果很好!

代码语言:javascript
复制
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!");
票数 42
EN

Stack Overflow用户

发布于 2009-09-17 13:37:17

只是在外面猜测一下...

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

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

代码语言:javascript
复制
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

那通常每隔一段时间就会让我很难受。

票数 2
EN

Stack Overflow用户

发布于 2009-09-17 13:39:38

仍然不能说为什么上面的代码不能工作,但我让log4net正确配置并使用我的附加器,将所有配置代码替换为:

代码语言:javascript
复制
log4net.Config.BasicConfigurator.Configure(_appender);

来自here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1436713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档