Log4net लॉग फ़ाइल में लॉग नहीं लिखता है


159

मैंने Log4net का उपयोग करके एक सरल परिदृश्य बनाया है, लेकिन ऐसा लगता है कि मेरे लॉग ऐप्पेंडर्स काम नहीं करते क्योंकि लॉग फ़ाइल में संदेश नहीं जोड़े जाते हैं।

मैंने 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>

वैश्विक ASAX फ़ाइल के भीतर मैंने जोड़ा है:

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

और Application_Start विधि के भीतर:

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

परीक्षण लॉग "एप्लिकेशन को प्रारंभ करना ..." लॉग फ़ाइल में क्यों नहीं जोड़ा जा रहा है?

जवाबों:


316

क्या आप करते हो

log4net.Config.XmlConfigurator.Configure();

कहीं log4net बनाने के लिए अपने विन्यास पढ़ा? जैसे Global.asax में:

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

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

4
बहुत बहुत धन्यवाद यह है, मेरे पास निम्न पंक्ति थी: log4net.Config.BasicConfigurator.Configure (); अगर मैं log4net को कॉन्फ़िगर करने के लिए web.config के बजाय c # कॉन्फ़िगरेशन का उपयोग करता हूं, तो क्या मैं इसे कॉल करता हूं? क्या यह "कॉन्फ़िगर करें" -मैथोड कॉल किसी भी तरह से आवश्यक है क्योंकि कई ट्यूटोरियल में मुझे कोड की यह पंक्ति नहीं मिली।
जॉन्हॉ फोर्स

9
Log4net को बताने के लिए कई तरीके हैं जहाँ कॉन्फ़िगरेशन की तलाश करें, logging.apache.org/log4net/release/manual/configuration.html देखें । XmlConfigurator.Configure () कॉल करने से <app.exe> ​​.config या web.config में कॉन्फ़िगरेशन के लिए log4net लुक आएगा। BasicConfigurator.Configure (SDK डॉक्स के अनुसार): "ConsoleAppender का उपयोग करके Log4net लॉगिंग सिस्टम को प्रारंभ करता है जो Console.Out को लिखेगा।"
एंड्रियास पॉलसन

FYI करें - यदि आप फ़ाइल आधारित नहीं चाहते हैं, तो आप log4net.Config.BasicConfigurator का भी उपयोग कर सकते हैं। कंसोल के लिए आउटपुट भेजा जाता है।
सिल्वरआर्क

1
मैं AssemblyInfoफ़ाइल में कॉन्फ़िगरेशन कर रहा हूं । नीचे एक उत्तर के रूप में पोस्ट किया गया।
LCJ

अर्घ, इन सवालों के बहुत सारे पाए गए और हर जगह वे यह उल्लेख करने में विफल रहे कि वास्तविक लॉग फाइलें कहां मिलेंगी ... क्या यह इतना स्पष्ट है कि हर कोई पहले से ही जानता है?
MrFox

50

इस FAQ पृष्ठ का उपयोग करें: Apache log4net अक्सर पूछे जाने वाले प्रश्न

जिस तरह से नीचे के बारे में 3/4 यह आपको बताता है कि आवेदन अनुरेखण का उपयोग करके लॉग 4नेट डिबगिंग को कैसे सक्षम किया जाए। यह आपको बताएगा कि आपका मुद्दा कहां है।

मूल बातें हैं:

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

और आप मानक आउटपुट में ट्रेस देखते हैं


1
धन्यवाद, मैंने अक्सर पूछे जाने वाले प्रश्न की जाँच की है लेकिन ये मेरी समस्या का समाधान नहीं कर सके।
जॉन्हो ०

1
इस उत्तर के लिए धन्यवाद मैं यह पहचानने में सक्षम था कि मेरा rootअनुभाग गलत लकड़हारे की बात कर रहा था !!
देखिए बिस्किट

महान टिप। मैंने पाया कि asp.net उपयोगकर्ता के लिए पहुँच से इनकार कर दिया गया था
ब्लू क्लाउड

यदि यह किसी के लिए काम नहीं करता है, तो कृपया मेरे इस तरीके का उपयोग करने का प्रयास करें: <log4net> <आंतरिक> <डीबग मान = "सत्य"> </ डीबग> </ आंतरिक> </ log4net>
himanshupareek66

35

जैसा कि @AndreasPaulsson ने सुझाव दिया, हमें इसे कॉन्फ़िगर करने की आवश्यकता है। मैं AssemblyInfoफ़ाइल में कॉन्फ़िगरेशन कर रहा हूं । मैं configuration file nameयहां निर्दिष्ट करता हूं ।

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

9
अगर मेरे पास यह और log4net.Config.XmlConfigurator.Configure () दोनों हैं तो क्या होगा; गोली भरना?
n00b

1
@ n00b, तो हम इस लाइन पर टिप्पणी कर सकते हैं, वास्तव में केवल इस तरह से कि यह मेरे लिए काम किया "log4net.Config.XmlConfigurator.Configure ();", और एक और बात: मैंने इसे अपने web.config सेटिंग्स में भी जोड़ा है <add key = "log4net.Internal.Debug" value = "true" />
himanshupareek66

33

इसके अलावा, सुनिश्चित करें कि "हमेशा लॉग करें" विकल्प का चयन [log4net] .config के लिए किया जाता है

यहां छवि विवरण दर्ज करें


1
यह मेरे लिए फिक्स था। मैं हमेशा इस सेटिंग को भूल जाता हूं।
Ju66ernaut

25

सुनिश्चित करें कि साइट के तहत चल रही प्रक्रिया (खाता) आउटपुट निर्देशिका में लिखने के लिए विशेषाधिकार है।

IIS 7 और इसके बाद के अनुप्रयोग पूल पर कॉन्फ़िगर किया गया है और सामान्य रूप से AppPool पहचान है , जिसमें सामान्य रूप से सभी निर्देशिकाओं को लिखने की अनुमति नहीं होगी।

यह देखने के लिए कि क्या कोई अपवाद फेंका गया है, अपने ईवेंट लॉग (एप्लिकेशन और सुरक्षा) की जांच करें।


आपकी मदद के लिए धन्यवाद, मैंने भी अनुमति की समस्याओं के बारे में सोचा था, लेकिन यह भी कि अगर मैंने फ़ोल्डर पर सेट किया है, तो लिखना, संशोधित करना और सभी के लिए अनुमतियों को निष्पादित करना जो काम नहीं करता है।
जॉन्हो सेप

@ john84 - क्या आपको अपवाद मिल रहे हैं? क्या आपने इवेंट लॉग को देखा है?
ऊदबिलाव

यह भी महत्वपूर्ण है, जैसा कि मैंने अभी पता लगाया है, एक विशिष्ट सेवा के तहत चल रही विंडोज सेवा के साथ।
बॉब मैक

बहुत बहुत धन्यवाद जिसने मेरी बहुत मदद की।
अब्बास

20

सम्मिलित करें:

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

AssemblyInfo.cs फ़ाइल के अंत में


यह मेरा बचाव था। एक डेस्कटॉप फॉर्म प्रोजेक्ट करना और log4net.Config.XmlConfigurator.Configure () डालना; में मदद नहीं कर रहा था धन्यवाद
टॉमस हेस्से

इससे मुझे मदद मिली। मेरे पास web.config में कॉन्फ़िगरेशन था, लेकिन log4net किए गए परिवर्तनों को नहीं उठा रहा था। मैंने उस विशेषता पर "वॉच = ट्रू" जोड़ दिया और एंथिंग ने काम करना शुरू कर दिया
यद्यपि

3

मेरे लिए मैंने लॉगफ़ाइल्स का स्थान बदल दिया और यह केवल तभी हुआ जब मैंने फ़ाइल का नाम बदलकर इसे फिर से शुरू किया।

ऐसा लगता है कि अगर पहले से ही मौजूद नाम के साथ लॉगफ़ाइल है, तो कुछ भी नहीं होता है।

बाद में मैं पुरानी फ़ाइल का नाम बदल देता हूं और लॉग फाइलनाम को फिर से कॉन्फ़िगर करता हूं जो वह था।


2

मेरे मामले में, मेरे प्रोजेक्ट नाम में जगह होने के कारण log4net ठीक से लॉग नहीं कर रहा था। मुझे पागल कर दिया क्यों एक ही कोड एक अलग परियोजना में ठीक काम किया, लेकिन नए में नहीं था। रिक्त स्थान। एक साधारण स्थान।

इसलिए, प्रोजेक्ट नामों में रिक्त स्थान से सावधान रहें। मैंने अपना सबक सीखा है।


1
आपके पास यह मुद्दा कहां था? Log4Net एक परियोजना में बहुत अच्छा काम कर रहा है, लेकिन दूसरे पर नहीं ... पता नहीं क्यों। Tks
पास्कल

2

मेरे मामले में मुझे IIS_IUSRSलॉग फ़ाइल में रीड \ राइट की अनुमति देनी थी ।


1

सुनिश्चित करें कि असेंबली में निम्न लाइन कोड होना चाहिए। Info.cs फ़ाइल।

[असेंबली: log4net.Config.XmlConfigurator (ConfigFile = "Web.config", Watch = true)]

और इस लाइन के लिए Application_start () विधि में भी जाँच करें।

log4net.Config.XmlConfigurator.Configure();

0

आपकी कॉन्फ़िग फ़ाइल सही लगती है। फिर, आपको आवेदन करने के लिए अपनी Log4net config फाइल को पंजीकृत करना होगा। तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

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

पंजीकरण प्रक्रिया के बाद, आप लकड़हारा को कॉल करने के लिए परिभाषा से नीचे कॉल कर सकते हैं:

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

log.Error("Sample log");

0

मेरे लिए मुझे लॉगर को नगेट पैकेज में ले जाना था। नीचे दिए गए कोड को NuGet पैकेज प्रोजेक्ट में जोड़ना होगा।

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

अधिक जानकारी के लिए https://gurunadhduvvuru.wordpress.com/2020/04/30/log4net-issues-when-moved-it-to-a-nuget-package/ देखें ।


उत्तर के रूप में लिंक से बचने की कोशिश करें। वे हमेशा काम नहीं कर सकते हैं। शायद लिंक में जानकारी का सारांश शामिल करने के लिए अपने उत्तर को संपादित करें।
डेरेक सी।

0

Log4net का उपयोग करने के कुछ तरीके हैं। मैंने पाया कि जब मैं एक समाधान खोज रहा था तो यह उपयोगी है। समाधान यहाँ वर्णित है: https://www.hemelix.com/log4net/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.