将日志写入文件

Yur*_*yak 38 .net c# logging log4net log4net-configuration

将日志从log4net写入文件时遇到了一些麻烦.我似乎按照手册中的描述完成所有操作,但这不起作用.这是我的logging.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="log.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

请帮助一个实际工作的配置文件的例子.

Con*_*ngo 79

以下是在Visual Studio 2012和.NET 4.5下将Log4Net添加到项目的完整分步指南.

  1. 在解决方案中添加新的C#控制台应用程序.

  2. 选择Tools >> Library Package Manager >> Manage NuGet Packages For Solution并搜索log4net.安装它,并选择要添加log4net引用的项目. 在此输入图像描述

  3. 编辑Program.cs:

using System;
namespace Log4Net
{    
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger
                (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        static void Main(string[] args)
        {
            Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n");
            log.Info("Info logging");
            try
            {
                throw new Exception("Exception!");
            }
            catch (Exception e)
            {
                log.Error("This is my error", e);
            }
            Console.WriteLine("[any key to exit]");
            Console.ReadKey();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. log4.config单击添加,右键单击,Properties然后选择Copy to Output Directory - Copy If Newer.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="250KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
  1. 编辑App.Config以使其与以下内容匹配:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <appSettings>
        <add key="log4net.Config" value="log4.config"/>
        <add key="log4net.Config.Watch" value="True"/>
        <add key="log4net.Internal.Debug" value="False"/>
    </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
  1. 运行该程序并观察log.txt在输出\bin\Debug\目录中创建的文件:

    2013-08-10 11:54:26,798 [10] INFO  Log4Net.Program [(null)] - Info logging
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error
    System.Exception: Exception!
       at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将来,如果要添加log4net到另一个项目,请选择Tools >> Library Package Manager >> Manage NuGet Packages For Solution选择log4net并单击,Manage然后勾选要添加log4net到的项目. 在此输入图像描述


jle*_*lew 44

您似乎没有<root>引用您的appender 的元素:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

    <log4net>
      <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="250KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="INFO" />
        <appender-ref ref="RollingFileAppender" />
      </root>
    </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是一个观点.另外我发现你可以把<level value ="ALL"/>重定向到文件的所有日志. (4认同)

Shy*_*yju 18

您是否在第一次启动应用程序时调用configure方法?

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

如是.你应该好.检查您正在编写的磁盘上的文件权限.

如果你想要,你也可以启用log4net内部调试,以找出问题所在.

http://logging.apache.org/log4net/release/faq.html#troubleshooting


Kev*_*een 6

你可以做两件事:

一,如果你想使用一个单独的配置文件,通过在app.config文件中添加以下内容,它将自动配置日志记录.

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="log4net.Config" value="log4.config"/>
        <add key="log4net.Config.Watch" value="True"/>
        <add key="log4net.Internal.Debug" value="False"/>
    </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

否则,您需要在应用程序的开头启动日志记录.

//Initiate logging based on web.config file
log4net.Config.XmlConfigurator.Configure();

// Create a logger for use in this class
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)