Log4net tidak menulis log dalam file log

159

Saya telah membuat skenario sederhana menggunakan Log4net, tetapi tampaknya bahwa log appenders saya tidak berfungsi karena pesan tidak ditambahkan ke file log.

Saya menambahkan berikut ini ke file web.config:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>        
</configSections>

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>

Dalam file ASAX global yang saya tambahkan:

ILog logger = LogManager.GetLogger(typeof(MvcApplication));

Dan dalam metode Application_Start:

logger.Info("Starting the application...");

Mengapa log uji "Memulai aplikasi ..." tidak ditambahkan ke file log?

john84
sumber

Jawaban:

316

Apakah Anda menelepon

log4net.Config.XmlConfigurator.Configure();

suatu tempat untuk membuat log4net membaca konfigurasi Anda? Misalnya di Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}
Andreas Paulsson
sumber
4
Terima kasih, Lot banyak itu, saya punya baris berikut: log4net.Config.BasicConfigurator.Configure (); Apakah saya memanggil ini jika saya menggunakan konfigurasi c # alih-alih web.config untuk mengkonfigurasi log4net? Apakah ini "Konfigurasi" -Metode panggilan dengan cara apa pun diperlukan karena dalam banyak tutorial saya tidak menemukan baris kode ini.
john84
9
Ada banyak cara untuk memberi tahu log4net di mana mencari konfigurasi, lihat logging.apache.org/log4net/release/manual/configuration.html . Memanggil XmlConfigurator.Configure () akan membuat log4net mencari konfigurasi di <app.exe> ​​.config atau web.config. BasicConfigurator.Configure akan (sesuai dengan dokumen SDK): "Menginisialisasi sistem log4net menggunakan ConsoleAppender yang akan menulis ke Console.Out."
Andreas Paulsson
FYI - Anda juga dapat menggunakan log4net.Config.BasicConfigurator jika Anda TIDAK menginginkannya berbasis file. Output dikirim ke konsol.
silverArc
1
Saya sedang melakukan konfigurasi dalam AssemblyInfofile. Diposting sebagai jawaban di bawah ini.
LCJ
Argh, menemukan begitu banyak pertanyaan ini dan di mana-mana mereka gagal menyebutkan di mana menemukan file log yang sebenarnya ... Apakah sudah jelas bahwa semua orang sudah tahu?
MrFox
50

Gunakan halaman FAQ ini: Apache log4net Pertanyaan yang Sering Diajukan

Sekitar 3/4 dari jalan ke bawah memberitahu Anda cara mengaktifkan debugging log4net dengan menggunakan penelusuran aplikasi. Ini akan memberi tahu Anda di mana masalah Anda.

Dasar-dasarnya adalah:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Dan Anda melihat jejak di output standar

bechbd
sumber
1
Terima kasih saya telah memeriksa FAQ tetapi ini tidak dapat menyelesaikan masalah saya.
john84
1
Berkat jawaban ini, saya dapat mengidentifikasi bahwa rootbagian saya merujuk pada penebang yang salah !!
seebiscuit
tip yang bagus. Saya menemukan bahwa akses ditolak untuk pengguna asp.net
Blue Clouds
jika tidak bekerja untuk seseorang, silakan coba cara saya untuk menggunakan ini: <log4net> <internal> <Debug value = "true"> </Debug> </internal> </log4net>
himanshupareek66
35

Seperti yang disarankan @AndreasPaulsson, kita perlu mengkonfigurasinya. Saya sedang melakukan konfigurasi dalam AssemblyInfofile. Saya tentukan di configuration file namesini.

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
LCJ
sumber
9
apa yang terjadi jika saya memiliki keduanya dan log4net.Config.XmlConfigurator.Configure (); sedang dimuat?
n00b
1
@ n00b, maka kita dapat mengomentari baris ini, sebenarnya hanya dengan cara ini ia bekerja untuk saya "log4net.Config.XmlConfigurator.Configure ();", Dan satu hal lagi: Saya menambahkan ini di pengaturan web.config saya juga <add key = "log4net.Internal.Debug" value = "true" />
himanshupareek66
33

Juga, Pastikan opsi "Salin selalu" dipilih untuk [log4net] .config

masukkan deskripsi gambar di sini

kokabi
sumber
1
Ini adalah perbaikan untuk saya. Saya selalu lupa pengaturan ini.
Ju66ernaut
25

Pastikan proses (akun) yang dijalankan situs memiliki hak istimewa untuk menulis ke direktori output.

Dalam IIS 7 dan di atasnya ini dikonfigurasi pada kumpulan aplikasi dan biasanya AppPool Identity , yang biasanya tidak memiliki izin untuk menulis ke semua direktori.

Periksa log peristiwa Anda (aplikasi dan keamanan) untuk melihat apakah ada pengecualian yang dilemparkan.

Oded
sumber
Terima kasih atas bantuan Anda, saya juga memikirkan masalah izin, tetapi juga jika saya menetapkan pada folder membaca, menulis, memodifikasi, dan mengeksekusi izin untuk semua orang itu tidak berfungsi.
john84
@ john84 - apakah Anda mendapatkan pengecualian? Sudahkah Anda melihat log peristiwa?
Oded
Juga penting, seperti yang baru saya temukan, dengan Layanan Windows berjalan di bawah akun tertentu.
Bob Mc
Terima kasih banyak yang banyak membantu saya.
Abbas
20

Memasukkan:

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

di akhir file AssemblyInfo.cs

shay
sumber
Ini adalah penyelamatanku. Melakukan proyek Formulir desktop dan meletakkan log4net.Config.XmlConfigurator.Configure (); utamanya tidak membantu. Terima kasih
Tomas Hesse
ini membantu saya. Saya memiliki konfigurasi di web.config tetapi log4net tampaknya tidak mengambil perubahan yang dilakukan. Saya menambahkan "Tonton = true" untuk atribut itu dan anithing mulai bekerja
albe
3

Bagi saya, saya memindahkan lokasi file log dan hanya ketika saya mengubah nama file menjadi sesuatu yang lain, file itu mulai lagi.

Tampaknya jika ada file log dengan nama yang sama sudah ada, tidak ada yang terjadi.

Setelah itu saya mengganti nama file lama dan mengubah nama file log di konfigurasi kembali lagi ke apa itu.

kode kernow
sumber
2

Dalam kasus saya, log4net tidak masuk dengan benar karena memiliki ruang dalam nama proyek saya. Mengecewakan saya mengapa kode yang sama bekerja dengan baik di proyek yang berbeda, tetapi tidak di yang baru. Spasi. Ruang sederhana.

Jadi, waspadalah spasi dalam nama proyek. Saya sudah belajar pelajaran saya.

zanussi
sumber
1
Di mana Anda memiliki masalah ini? Log4Net bekerja dengan baik dalam satu proyek, tetapi tidak pada yang lain ... tidak tahu mengapa. Tks
Pascal
2

Dalam kasus saya, saya harus memberikan IIS_IUSRSizin Baca \ tulis ke file log.

Rahatur
sumber
1

Pastikan kode baris berikut ada di file AssemblyInfo.cs.

[perakitan: log4net.Config.XmlConfigurator (ConfigFile = "Web.config", Watch = true)]

dan juga memeriksa baris ini dalam metode Application_start ().

log4net.Config.XmlConfigurator.Configure();
Prajakta Kale
sumber
0

File konfigurasi Anda tampaknya benar. Kemudian, Anda harus mendaftarkan file konfigurasi Log4net Anda ke aplikasi. Jadi, Anda dapat menggunakan kode di bawah ini:

var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));

Setelah proses pendaftaran, Anda dapat memanggil definisi di bawah ini untuk memanggil logger:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

log.Error("Sample log");
Mahmut EFE
sumber
0

Bagi saya, saya harus memindahkan Logger ke Paket Nuget. Kode di bawah ini perlu ditambahkan dalam proyek paket NuGet.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

Lihat https://gurunadhduvvuru.wordpress.com/2020/04/30/log4net-issues-when-moved-it-to-a-nuget-package/ untuk rincian lebih lanjut.

Gurunadh Duvvuru
sumber
Cobalah untuk menghindari tautan sebagai jawaban. Mereka mungkin tidak selalu berhasil. Mungkin edit jawaban Anda untuk memasukkan ringkasan informasi dalam tautan.
Derek C.