Question

J'utilise log4net dans un projet C #, dans l'environnement de production, je souhaite désactiver toute la journalisation, mais certains sont fatals. une erreur se produit, elle devrait consigner dans un fichier tous les 512 messages précédents. Il enregistre les messages dans un fichier en cas d'erreur fatale.

Mais lorsque je l'exécute à partir de Visual Studio, tous les messages du journal sont écrits dans la fenêtre de sortie, qu'il s'agisse ou non de fatal. (Je ne peux pas voir ces messages lorsque je lance à partir de l'Explorateur Windows - mon application est un fichier exe WinForm et il n'y a pas de fenêtre console pour afficher le résultat.

Existe-t-il un moyen de désactiver cette journalisation? J'ai besoin de mes journaux uniquement dans le fichier, cela aussi lorsque survient une erreur fatale.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net debug="false">

        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="1MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>

        <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
            <bufferSize value="512" />
            <lossy value="true" />
            <evaluator type="log4net.Core.LevelEvaluator">
                <threshold value="FATAL"/>
            </evaluator>
            <appender-ref ref="RollingFileAppender" />
        </appender> 

        <root>
            <level value="DEBUG" />
            <appender-ref ref="BufferingForwardingAppender" />          
        </root>
    </log4net>
</configuration>

Et voici comment je le configure dans l'initialiseur statique de Windows Forms.

static Window1()
    {
      Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config");
      XmlConfigurator.Configure(vStream);
      BasicConfigurator.Configure();
    }

Et j'ai l'objet logger initialisé dans le constructeur de WinForm

logger = LogManager.GetLogger(typeof(Window1));

[langue - C #, .NET Framework - 3.5, Visual Studio 2008, log4net 1.2.10, type de projet - WinForms]

Était-ce utile?

La solution

Supprimez le BasicConfigurator.Configure () ligne. C’est ce que fait cette ligne: ajoute un ConsoleAppender pointant sur Console.Out.

Autres conseils

Voyez-vous toujours les messages dans Visual Studio si l'application est compilée en mode édition? Il est possible que log4net utilise quand même Debug.Write pour afficher les erreurs. Si tel est le cas, ces messages ne devraient pas apparaître en mode de libération.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top