Saya ingin menulis log ke 2 file log berbeda dari proses yang sama.
apakah itu mungkin dilakukan dengan menggunakan log4net?
Saya harus menulis pesan terpisah untuk setiap file log. bagaimana saya bisa menulis pesan ke appender tertentu?
Saya ingin menulis log ke 2 file log berbeda dari proses yang sama.
apakah itu mungkin dilakukan dengan menggunakan log4net?
Saya harus menulis pesan terpisah untuk setiap file log. bagaimana saya bisa menulis pesan ke appender tertentu?
Jawaban:
Ya, cukup tambahkan beberapa FileAppenders ke logger Anda. Sebagai contoh:
<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>
Jawaban-jawaban ini sangat membantu, tetapi saya ingin membagikan jawaban saya dengan bagian app.config dan c # code, jadi tidak ada lagi tebakan untuk orang berikutnya.
<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>
Kemudian dalam kode:
ILog Log = LogManager.GetLogger("SomeName");
ILog SummaryLog = LogManager.GetLogger("Summary");
Log.DebugFormat("Processing");
SummaryLog.DebugFormat("Processing2"));
Di sini c: /Console.txt akan berisi "Memproses" ... dan \ SummaryFile.log akan berisi "Processing2"
<layout> ... </layout>
, tanpanya saya tidak melihat pesan apa pun di file log.
Vinay benar. Sebagai jawaban atas komentar Anda dalam jawabannya, salah satu cara Anda dapat melakukannya adalah sebagai berikut:
<root>
<level value="ALL" />
<appender-ref ref="File1Appender" />
</root>
<logger name="SomeName">
<level value="ALL" />
<appender-ref ref="File1Appender2" />
</logger>
Beginilah cara saya melakukannya di masa lalu. Maka sesuatu seperti ini untuk log lainnya:
private static readonly ILog otherLog = LogManager.GetLogger("SomeName");
Dan Anda bisa mendapatkan logger normal Anda sebagai berikut:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Baca bagian logger dan appenders dari dokumentasi untuk memahami cara kerjanya
Saya ingin mencatat semua pesan ke root logger, dan memiliki log terpisah dengan kesalahan, berikut ini caranya:
<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>
Perhatikan penggunaan elemen filter.
Gunakan konfigurasi XML di bawah ini untuk mengonfigurasi log menjadi dua atau lebih file,
<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>
Log konfigurasi XML di atas menjadi dua file yang berbeda.
Untuk mendapatkan instance spesifik dari logger secara terprogram,
ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");
Anda bisa menambahkan dua atau lebih elemen appender di dalam elemen root log4net untuk masuk ke file banyak.
Info lebih lanjut tentang struktur konfigurasi XML di atas atau appender mana yang terbaik untuk aplikasi Anda, Baca detail dari tautan di bawah ini,
https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html
Semoga ini bisa membantu.