Aynı işlemden 2 farklı günlük dosyasına günlük yazmak istiyorum.
bu log4net kullanarak yapılabilecek bir şey mi?
Her günlük dosyasına ayrı mesajlar yazmam gerekecek. belirli bir ekleyiciye nasıl mesaj yazabilirim?
Aynı işlemden 2 farklı günlük dosyasına günlük yazmak istiyorum.
bu log4net kullanarak yapılabilecek bir şey mi?
Her günlük dosyasına ayrı mesajlar yazmam gerekecek. belirli bir ekleyiciye nasıl mesaj yazabilirim?
Yanıtlar:
Evet, kaydedicinize birden fazla FileAppenders ekleyin. Örneğin:
<log4net>
<appender name="File1Appender" type="log4net.Appender.FileAppender">
<file value="log-file-1.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %message%newline" />
</layout>
</appender>
<appender name="File2Appender" type="log4net.Appender.FileAppender">
<file value="log-file-2.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="File1Appender" />
<appender-ref ref="File2Appender" />
</root>
</log4net>
Bu cevaplar yardımcı oldu, ancak cevabımı hem app.config kısmı hem de c # kodu kısmı ile paylaşmak istedim, böylece bir sonraki kişi için daha az tahmin yapılsın.
<log4net>
<appender name="SomeName" type="log4net.Appender.RollingFileAppender">
<file value="c:/Console.txt" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
</appender>
<appender name="Summary" type="log4net.Appender.FileAppender">
<file value="SummaryFile.log" />
<appendToFile value="true" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="SomeName" />
</root>
<logger additivity="false" name="Summary">
<level value="DEBUG"/>
<appender-ref ref="Summary" />
</logger>
</log4net>
Sonra kodda:
ILog Log = LogManager.GetLogger("SomeName");
ILog SummaryLog = LogManager.GetLogger("Summary");
Log.DebugFormat("Processing");
SummaryLog.DebugFormat("Processing2"));
Burada c: /Console.txt "İşleniyor" ... ve \ SummaryFile.log "Processing2" içerecektir.
<layout> ... </layout>
, bu olmadan günlük dosyasında herhangi bir mesaj görmedim.
Vinay haklı. Onun cevabındaki yorumunuza cevaben, bunu yapmanın bir yolu şu şekildedir:
<root>
<level value="ALL" />
<appender-ref ref="File1Appender" />
</root>
<logger name="SomeName">
<level value="ALL" />
<appender-ref ref="File1Appender2" />
</logger>
Geçmişte bunu böyle yaptım. Sonra diğer günlük için buna benzer bir şey:
private static readonly ILog otherLog = LogManager.GetLogger("SomeName");
Ve normal kaydedicinizi aşağıdaki gibi alabilirsiniz:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Bunun nasıl çalıştığını anlamak için dokümantasyonun kaydediciler ve ekler bölümünü okuyun .
Tüm mesajları kök kaydediciye kaydetmek ve hatalar içeren ayrı bir günlüğe sahip olmak istedim, işte bunun nasıl yapılacağı:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="allMessages.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
<file value="errorsLog.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
<appender-ref ref="ErrorsFileAppender" />
</root>
</log4net>
Filtre elemanının kullanımına dikkat edin.
Günlükleri iki veya daha fazla dosyada yapılandırmak için aşağıdaki XML yapılandırmasını kullanın,
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
<file value="logs\log1.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<logger additivity="false" name="RollingLogFileAppender2">
<level value="All"/>
<appender-ref ref="RollingLogFileAppender2" />
</logger>
</log4net>
Yukarıdaki XML yapılandırması iki farklı dosyada oturum açar.
Programlı olarak belirli bir günlükçü örneğini almak için,
ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");
Birden çok dosyada oturum açmak için log4net kök öğesinin içine iki veya daha fazla ekleyici öğe ekleyebilirsiniz.
Yukarıdaki XML yapılandırma yapısı veya uygulamanız için hangi ekleyicinin en iyi olduğu hakkında daha fazla bilgi, Aşağıdaki bağlantıdan ayrıntıları okuyun,
https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html
Umarım bu yardımcı olur.