在C#中使用log4net附加到文件

时间:2019-03-01 14:16:15

标签: c# log4net

我是log4net的新手,并且想创建一个执行以下操作的简单控制台应用程序:

  1. 读取数字作为输入

  2. 循环很多次

  3. 打印运行循环所花费的时间
  4. 以以下格式创建日志文件:

MM/DD/YYYY-输入:<num>-时间:<time> ms

在我的AssemblyInfo.cs中,添加了以下行:

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

我的App.config看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>                       
   <configuration>                                           
       <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
       </configSections>                                            
       <log4net>                                                    
           <appender name="FileAppender" type="log4net.Appender.FileAppender">
               <file value="MyLog.txt" />
               <appendToFile value="true" />
               <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
               <layout type="log4net.Layout.PatternLayout">
                   <conversionPattern value="%dateExtra Info: %property{input}%property{time}%newline" />
              </layout>
              <filter type="log4net.Filter.LevelRangeFilter">
                  <levelMin value="INFO" />
                  <levelMax value="FATAL" />
             </filter>
         </appender>                                                   
         <root>
             <level value="INFO"/>
             <appender-ref ref="FileAppender"/>
         </root>                                                    
      </log4net>                                                                          
      <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />                                  
    </startup>                                               
  </configuration>

我的代码如下:

using log4net;
using System;
using System.Diagnostics;
namespace ConsoleApplication1
    {
        class Program
        {
            private static long num;
            private static readonly ILog log = LogManager.GetLogger
                (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            static void Main(string[] args)
            {
                Console.Write("Please enter a number: ");
                try
                {    
                    // gets number as input
                    num = long.Parse(Console.ReadLine());
                    if (num <= 0) throw new Exception("Number must be positive and non zero");
                }
                catch (FormatException e)
                {
                    Console.WriteLine(e.Message);
                    Console.Read();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.Read();
                }
                // create new stopwatch instance
                Stopwatch sw = new Stopwatch();
                // starts the timer
                sw.Start();
                // runs loop [num] times
                for (long i = 0; i < num; i++) ;
                // stops the timer
                sw.Stop();
                Console.WriteLine("Loop ran for {0}ms", sw.ElapsedMilliseconds);
                GlobalContext.Properties["input"] = " - Input : " + num;
                GlobalContext.Properties["time"] = " - Time : " + sw.ElapsedMilliseconds + "ms";
                Console.Read();
            }
        }
    }

确实创建了文件,但创建的文件为空。这可能是什么问题?

1 个答案:

答案 0 :(得分:2)

您需要使用

之类的命令记录某些内容
fun <T> doJob(valOne: T, valTwo: T){

}

那就像

log.Info(string.Format("Input: {0} - Time: {1}ms", input, time)); 

看看:https://stackify.com/log4net-guide-dotnet-logging/