Éliminer le double de journalisation dans log4net

J'ai un programme qui fait beaucoup de log4net les appels à la "myprogram" bûcherons. Il appelle également à un autre code qui fait log4net des appels à d'autres enregistreurs. Je veux capturer tous les journaux de plus que l'INFO pour "myprogram" et tous les journaux plus que de mettre en garde pour tout le reste. De cette façon, j'obtiens le travail en cours, les messages spécifiques à la tâche que je suis en train de travailler sur, mais je suis encore notifié de potentiellement mauvaises choses qui se passe dans le code de prise en charge. Ce que je veux c'envoyé à la Console et un fichier journal.

J'ai le texte suivant log4net config:

<log4net>
    <root>
        <level value="WARN" />
        <appender-ref ref="Console" />
        <appender-ref ref="LogFile" />
    </root>
    <logger name="myprogram">
        <level value="INFO" />
        <appender-ref ref="Console" />
        <appender-ref ref="LogFile" />
    </logger>
    <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message%newline" />
        </layout>
        <threshold value="INFO" />
    </appender>
    <appender name="LogFile" type="log4net.Appender.RollingFileAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
        </layout>
        <appendToFile value="false" />
        <staticLogFileName value="true" />
        <rollingStyle value="Once" />
        <file value="mylogfile" />
        <immediateFlush value="true" />
        <threshold value="INFO" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>
</log4net>

Cela fait beaucoup de sens pour moi: log >AVERTIR de tout et de >INFO pour les "myprogram" logger.

Le problème c'est que je reçois des messages d'INFOS consignées deux fois sur les deux Console et les fichiers de Log. Cela se produit uniquement si j'ai le <root> et <logger> éléments rempli, si je supprimer une puis l'autre des œuvres que j'attends.

Je pourrais comprendre si j'ai été prise en double enregistrement d'AVERTIR les entrées (depuis myprogram correspond à la fois à "root" et "myprogram"), mais ce qui se passe au INFO, même si la RACINE est (sans doute) configuré pour AVERTIR.

Je fais quelque chose de mal ici, ou est-ce un log4net bug/ambiguïté?

InformationsquelleAutor Craig Walker | 2009-03-16