web-dev-qa-db-ja.com

ログをファイルに書き込む

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>

実際に機能する設定ファイルの例をご覧ください。

37
Yury Pogrebnyak

アペンダーを参照する<root>要素がないようです。

<?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>
44
jlew

Visual Studio 2012および.NET 4.5で、プロジェクトにLog4Netを追加するための完全なステップバイステップガイドがあります。

  1. ソリューションに新しいC#コンソールアプリを追加します。

  2. Tools >> Library Package Manager >> Manage NuGet Packages For Solutionを選択し、log4netを検索します。それをインストールし、log4net参照を追加するプロジェクトを選択します。 enter image description here

  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();
            }
        }
    }
}
  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>
  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>
  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
    
  2. 将来、log4netを別のプロジェクトに追加する場合は、Tools >> Library Package Manager >> Manage NuGet Packages For Solutionを選択してlog4netを選択し、Manageをクリックしてから、追加するプロジェクトを選択してくださいlog4netに。 enter image description here

78
Contango

アプリケーションの初回起動時にconfigureメソッドを呼び出しましたか?

log4net.Config.XmlConfigurator.Configure();

そうであれば。あなたは良いはずです。書き込み中のディスクのファイル許可を確認してください。

必要に応じて、log4netの内部デバッグを有効にして、何が問題なのかを判断することもできます。

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

18
Shyju

できることは2つあります。

1つは、別の構成ファイルを使用する場合、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>

それ以外の場合は、アプリケーションの開始時にロギングを開始する必要があります。

//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);
6
Kevin Green

素晴らしい。答えは正しいです...彼らは私のために働いていなかったことを除いて

ネットを検索し、最終的に、Assembly.csに次の行がないことを発見しました。

[Assembly: log4net.Config.XmlConfigurator]
3
JAnton