【问题标题】:Why is log4net not writing to a file?为什么 log4net 不写入文件?
【发布时间】:2020-01-06 23:23:56
【问题描述】:

我已经添加了 log4net 的所有部分,但是它没有写入文件。
我正在使用 VS2012 LoadTest 项目。

在运行 LoadTest 项目时,System.Console.WriteLineDebug.WriteLine() 都不起作用。

我已添加装配信息行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]   //For log4net 1.2.10.0

我已经:
- 添加了 webconfig 部分
- 初始化一个配置的 XML 初始化器
- 使用正确的日志初始化新的 log4net

我的 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;
        }
    }
}

【问题讨论】:

  • 请显示您的 web.config log4net 部分以及用于初始化它的代码
  • 上次使用它时为我工作过。一定是你做错了什么;)
  • 你能把web.config的log4net部分的代码贴出来吗?
  • @LawrenceWagerfield 即使在运行负载测试本身而不仅仅是 Web 测试时也能正常工作?
  • 您是否设法使这项工作适用于 webtest? @EladBenda

标签: c# visual-studio-2012 log4net


【解决方案1】:

如果您希望 log4net 从 app.config 中读取,您必须将其添加到您的 AssemblyInfo.cs 文件中:

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

【讨论】:

  • 有类似的。没有帮助
  • 这是项目的缺失部分,它阻止我创建/添加到日志。为我节省了很多时间。谢谢@akatakritos
【解决方案2】:

查看您的 app.config

&lt;supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /&gt;

这可以确保应用程序在启动时出现错误而拒绝在 .NET 4.0 上启动。

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

【讨论】:

  • 使用 NET4 框架创建一个新项目。如果你想使用 log4net,别无他法。
  • 保持在 4.5 我有什么日志记录选项?
  • 您是否将 app.config 中的设置更改为:&lt;supportedRuntime version="v4.0.30319" /&gt;,您是否重新创建了项目?
  • 更改了项目属性,并将 app.config 自动更改为:` `。我已经重建,文件没有创建
  • 在您的 app.config 中,尝试将您的 &lt;root&gt;&lt;/root&gt; 更改为 &lt;logger name="Activity"&gt; &lt;level value="DEBUG" /&gt; &lt;appender-ref ref="RollingLogFileAppender" /&gt; &lt;/logger&gt; 如果这不起作用,请按照您执行的相同步骤尝试创建一个全新的 NET4 测试项目。我不能将您推荐给其他日志记录库,您始终可以使用自定义日志记录,但这几乎总是很麻烦,并且您会失去很多功能。
【解决方案3】:

使用&lt;param name = "Activity" value="Settings_CacheExplosion.txt" /&gt; 而不是&lt;file value="Settings_CacheExplosion.txt" /&gt;。在您的 xml 配置部分中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2012-02-01
    • 2019-08-01
    相关资源
    最近更新 更多