简体   繁体   English

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

[英]Appending to File using log4net in C#

I'm new to log4net and would like to create a simple console application that does the following: 我是log4net的新手,并且想创建一个执行以下操作的简单控制台应用程序:

  1. Reads a number as an input 读取数字作为输入

  2. Loops that many iterations 循环许多迭代

  3. Prints the time it took to run the loop 打印运行循环所花费的时间
  4. Creates a log file in the following format : 以以下格式创建日志文件:

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

In my AssemblyInfo.cs I added the following line: 在我的AssemblyInfo.cs中,添加了以下行:

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

My App.config looks like this: 我的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>

My code looks like this: 我的代码如下所示:

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();
            }
        }
    }

The file does get created but it is created empty. 该文件确实创建了,但是创建为空。 What could be the problem here? 这可能是什么问题?

You need to log something with commands like 您需要使用以下命令记录一些内容

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

That is something like 那就像

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.WriteLine("Loop ran for {0}ms", sw.ElapsedMilliseconds);
            log.Info(string.Format("Input: {0} - Time: {1}ms", num, sw.ElapsedMilliseconds)); 
            ...
        }
    }
}

Have a look at: https://stackify.com/log4net-guide-dotnet-logging/ 看看: https//stackify.com/log4net-guide-dotnet-logging/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM