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.
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>
Voici un guide étape par étape complet pour ajouter Log4Net à votre projet, sous Visual Studio 2012 et .NET 4.5.
Ajoutez une nouvelle application console C # à votre solution.
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.
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();
}
}
}
}
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>
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>
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
À 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
à.
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
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);
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]