web-dev-qa-db-fra.com

Écriture de journaux dans un fichier

J'ai des problèmes lors de l'écriture des journaux de log4net dans le fichier. Je semble faire tout comme décrit dans le manuel, mais cela ne fonctionne pas. Voici mon fichier 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>

Veuillez aider avec un exemple de fichier de configuration qui fonctionne réellement.

37
Yury Pogrebnyak

Vous ne semblez pas avoir un <root> élément qui fait référence à votre 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>
44
jlew

Voici un guide étape par étape complet pour ajouter Log4Net à votre projet, sous Visual Studio 2012 et .NET 4.5.

  1. Ajoutez une nouvelle application console C # à votre solution.

  2. Sélectionnez Tools >> Library Package Manager >> Manage NuGet Packages For Solution et recherchez log4net. Installez-le et sélectionnez le ou les projets auxquels vous souhaitez ajouter les références log4net. enter image description here

  3. Modifier 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. Ajouter log4.config, faites un clic droit et sélectionnez Properties puis sélectionnez 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. Modifier App.Config donc il correspond à ce qui suit:
<?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. Exécutez le programme et observez le fichier log.txt créé dans la sortie \bin\Debug\ répertoire:

    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. À l'avenir, si vous souhaitez ajouter log4net vers un autre projet, sélectionnez Tools >> Library Package Manager >> Manage NuGet Packages For Solution sélectionnez log4net et cliquez sur Manage puis cochez les projets que vous souhaitez ajouter log4net à. enter image description here

78
Contango

Avez-vous appelé la méthode configure lorsque l'application démarre pour la première fois?

log4net.Config.XmlConfigurator.Configure();

Si oui. Tu devrais être bon. Vérifiez les autorisations de fichier sur le disque que vous écrivez.

Si vous le souhaitez, vous pouvez également activer le débogage interne de log4net pour déterminer ce qui ne va pas.

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

18
Shyju

Vous pouvez faire deux choses:

Premièrement, si vous souhaitez utiliser un fichier de configuration séparé, en ajoutant ce qui suit à votre fichier app.config, il configurera la journalisation automatiquement.

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

Sinon, vous devez lancer la connexion au début de votre application.

//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

Fantastique. Les réponses sont correctes ... sauf qu'elles ne fonctionnaient pas pour moi

J'ai cherché sur le net et j'ai finalement découvert qu'il me manquait la ligne suivante dans Assembly.cs:

[Assembly: log4net.Config.XmlConfigurator]
3
JAnton