为什么log4net没有写入文件?

4
我已添加了log4net的所有部分,但它不会写入文件。
我正在使用VS2012 LoadTest项目工作。
当运行LoadTest项目时,无论是System.Console.WriteLine还是Debug.WriteLine()都不起作用。
我已添加程序集信息行:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]   //For log4net 1.2.10.0

我已经做了以下事情: - 添加了 WebConfig 部分 - 初始化并配置了 XML 初始化器 - 使用适当的日志初始化了新的 log4net
我的 App.config:
(未提供 App.config 的具体内容)
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Settings_CacheExplosion.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

</configuration>

我的课程:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.17929
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace WebAndLoadTestProject1
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Text;
    using log4net;
    using log4net.Core;
    using Microsoft.VisualStudio.TestTools.WebTesting;


    public class Settings_CacheExplosion : WebTest
    {
        private static readonly ILog activityLog = LogManager.GetLogger("Activity"); 

        private static int _ctidsCounter { get; set; }

        public static int CtidsCounter
        {

            get
            {

                if (_ctidsCounter == 2000)
                {
                    _ctidsCounter = 1000;
                }
                return _ctidsCounter++;
            }
            set
            {
                _ctidsCounter = value;
            }
        }

        public Settings_CacheExplosion()
        {
            this.PreAuthenticate = true;

            CtidsCounter = 1000;

            log4net.Config.XmlConfigurator.Configure();
        }


        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            WebTestRequest request1 = new WebTestRequest("http://clientservice.mam.qasite-services.com/settings");

            request1.Method = "POST";

            Debug.WriteLine(string.Format("ctid={0}", CtidsCounter));

            request1.QueryStringParameters.Add("ctid", CtidsCounter.ToString(), false, false);
            StringHttpBody request1Body = new StringHttpBody();
            request1Body.ContentType = "";
            request1Body.InsertByteOrderMark = false;
            request1Body.BodyString = "";
            request1.Body = request1Body;

            activityLog.Debug(string.Format("ctid={0}", CtidsCounter));
            //Console.WriteLine(string.Format("ctid={0}", CtidsCounter));

            yield return request1;
            request1 = null;
        }
    }
}

1
请展示您的 web.config log4net 部分以及您用于初始化它的代码。 - Davide Piras
1
上次我用它的时候还能正常工作,可能是你操作有误 ;) - Lawrence Wagerfield
1
你能发布一下web.config文件中log4net部分的代码吗? - Riccardo
@LawrenceWagerfield在运行负载测试本身而不仅仅是Web测试时也能正常工作吗? - Elad Benda
你已经成功让这在webtest上运行了吗? @EladBenda - grabhints
无法记起 :( - Elad Benda
3个回答

5

如果您想让log4net从app.config文件中读取信息,您需要在AssemblyInfo.cs文件中添加以下内容:

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

有类似的一个,但没有帮助。 - Elad Benda
这是项目中缺失的部分,阻止了我创建/添加日志。节省了我很多时间。谢谢@akatakritos。 - amundell

4

查看您的app.config

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>

这可以确保应用程序会在启动时拒绝在.NET 4.0上启动并显示错误。

如果您正在使用框架.NET4.5,则log4net不支持它。请参见http://logging.apache.org/log4net/release/features.html中的框架部分。


使用NET4框架创建一个新项目。如果您想使用log4net,那么没有其他方法。 - Milen Kindekov
保持在4.5,我有哪些日志记录选项? - Elad Benda
你是否将app.config中的设置更改为:<supportedRuntime version="v4.0.30319" />,并重新创建了项目? - Milen Kindekov
在项目属性中更改后,它会自动更改 app.config 为:<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>。我已经重新生成了,但文件未被创建。 - Elad Benda
在你的app.config中,尝试将<root></root>更改为<logger name="Activity"> <level value="DEBUG" /> <appender-ref ref="RollingLogFileAppender" /> </logger>。如果这不起作用,请尝试创建一个全新的NET4测试项目,并按照您所采取的相同步骤进行操作。我无法向您推荐其他日志记录库,您始终可以选择自定义日志记录,但这几乎总是很麻烦,并且您会失去很多功能。 - Milen Kindekov
最后但并非最不重要的,阅读 log4net FAQ 后,log4net 无法从 Web 应用程序记录到 FileAppender。 - Milen Kindekov

1

在您的XML配置部分中,请使用<param name = "Activity" value="Settings_CacheExplosion.txt" />代替<file value="Settings_CacheExplosion.txt" />


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接