Hai, saya memiliki konfigurasi ini di web.config saya
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
tetapi log4net tidak berfungsi. Proyek saya terkompilasi dengan baik, dan saya juga tidak mendapatkan kesalahan debugging. Garis-garis yang saya log.debug("somemessage")
perintahkan untuk berjalan dengan baik, tetapi saya tidak dapat menemukan mylog.log
file tersebut, jadi di mana itu?
Jawaban:
Satu gotcha untuk jenis hal ini adalah memastikan untuk menambahkan
XmlConfigurator
atribut ke assembly dengan menempatkan baris berikut di AndaAssemblyInfo.cs
:Jika tidak, log4net tidak pernah aktif.
sumber
AssemblyInfo
secepat yang Anda pikirkan.Saya kira baik log4net tidak melakukan logging sama sekali, atau file tersebut tidak berakhir di tempat yang Anda harapkan.
Pertama, apakah Anda benar-benar menelepon
di mana saja di kode Anda? Jika potongan xml di atas ada dalam file konfigurasi aplikasi, panggilan ini akan melakukan triknya. Jika cuplikan xml ada di dalam filenya sendiri, Anda harus menggunakan
.Configure(string)
kelebihan beban yang mengambil jalur ke file tersebut. Tanpa panggilan ini (atau tampaknya atribut tingkat perakitan yang disebutkan oleh Kirk Woll), maka log4net tidak akan masuk sama sekali.Jika Anda yakin ini semua sudah selesai, dan log4net seharusnya melakukan logging, mungkin Anda harus memasukkan jalur yang memenuhi syarat untuk file log saat Anda melakukan debug lebih lanjut. Itu akan membuat Anda yakin di mana file itu seharusnya .
sumber
Ada gotcha kecil lainnya, lihat di sini: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
yang
[assembly: log4net.Config.XmlConfigurator]
metode tidak bekerja dengan app.config. Jika Anda mengkonfigurasi log4net dari app.config, Anda harus menggunakanlog4net.Config.XmlConfigurator.Configure()
metode ini.sumber
Berikut adalah daftar periksa saya tentang kapan log4net terbukti bandel:
sumber
Untuk penambahan proyek ASP.NET MVC
ke Global.asax.cs juga membantu:
sumber
Ini adalah langkah-langkah yang pada akhirnya membuat pencatatan file saya berfungsi:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
keappSettings
.sumber
Saya memiliki pengalaman di mana sistem logging gagal secara diam-diam tanpa memunculkan pengecualian. Saya kira ini masuk akal karena jika logger melakukan kesalahan pencatatan lalu bagaimana ia dapat mencatat kesalahan yang tidak dapat melakukan pencatatan?
Jadi jika file tidak dibuat pada disk, mulailah dengan melihat izin sistem file untuk memastikan pengguna yang menjalankan aplikasi Anda dapat menulis file baru ke lokasi disk tersebut.
Untuk tujuan pengujian, Anda mungkin ingin secara manual membuat file pada disk yang harus ditulis dan membuka izin bagi semua orang untuk menulis padanya. Jika logger mulai menulis padanya maka Anda tahu itu berbasis izin daripada berbasis konfigurasi.
sumber
Di sisi saya, saya lupa menandai file konfigurasi untuk disalin saat aplikasi sedang dikompilasi.
Cukup klik kanan file log4net.config, pilih properti lalu pilih Salin ke Direktori Output untuk disalin XXXX
sumber
Saya mencoba semua cara di atas tetapi tidak ada yang berhasil. Menambahkan baris ini di bagian app.config
configSections
berhasil untuk saya.Pastikan itu
Version
danPublicKeyToken
benarsumber
mengatakan "tulis mylog.log ke folder sebenarnya". Artinya jika aplikasi web Anda berada di bawah IIS, maka log akan ditulis ke C: \ inetpub \ wwwroot \ appname \ mylog.log.
Jika file log tidak ada, maka mungkin akun yang menjalankan aplikasi tidak memiliki izin menulis di folder. Anda dapat menjalankan Monitor Proses dari SysInternals untuk melihat apakah dan di mana file ditulis.
Juga jalankan VS dalam mode debug, untuk melihat apakah ada pengecualian yang dilemparkan (Debug-> Pengecualian-> Pengecualian CLR, centang Dilempar).
sumber
Dalam kasus saya, saya lupa untuk mengatur properti file log4Net.config sebagai "Konten" sehingga file tersebut tidak disertakan dalam penerapan. Jadi perhatikan itu:
sumber
Sayangnya, semua hal di atas tidak membantu. Konfigurasi eksplisit di kelas yang akan dicatat sebagai tambahan untuk saran pengaturan sebelumnya melakukan trik untuk saya.
sumber
Juga setelah beberapa jam, saya menemukan mengapa itu tidak berhasil untuk saya ...
saya punya:
tetapi seharusnya:
Jadi pastikan ILog ada di baris pertama ....
sumber