2009-02-18 8 views
38

मैं log4net.GlobalContext.Properties शब्दकोश में सेट की गई संपत्ति का उपयोग करने के लिए log4net फ़ाइल पथ को कस्टमाइज़ करने का प्रयास कर रहा हूं।मैं log4net एपेंडर नाम में ग्लोबलकॉन्टेक्स्ट प्रॉपर्टी का उपयोग कैसे करूं?

log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue"; 

मैं देख सकता हूं कि यह मान सही तरीके से सेट होने पर सेट किया गया है। और फिर मेरी विन्यास में

<file type="log4net.Util.PatternString" 
     value="Logs\%appdomain_%property{LogPathModifier}.log" /> 

हालांकि, इस के उत्पादन में मुझे पथ के अंत में देता है "_ (शून्य) लॉग"। क्या देता है?

उत्तर

54

मैं एक ही व्यवहार में पड़ गए और XmlConfigurator कॉल करने से पहले वैश्विक चर सेट करके इसे हल ... यहाँ मैं क्या सफलतापूर्वक उपयोग कर रहा हूँ है .asax विवरण:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Global.asax"); 
void Application_Start(object sender, EventArgs e) 
{ 
    // Set logfile name and application name variables 
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log"; 
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name; 

    // Load log4net configuration 
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config")); 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile); 

    // Record application startup 
    log.Debug("Application startup"); 
} 

आशा इस मदद करता है ...

+0

मुझे बिल्कुल वही समस्या थी, मेरे मामले में मैं 2 अलग-अलग प्रक्रियाओं से एक ही फाइल में लॉग इन करने का प्रयास कर रहा था। यह 2 अलग-अलग फाइलों में हो रहा था, लेकिन दूसरे ऐप में XmlConfigurator को कॉल करने से पहले वैश्विक चर सेट करना समस्या हल हो गई। आपका बहुत बहुत धन्यवाद। +1 –

+1

मैंने 'System.Reflection.Assembly.GetExecutingAssembly()। GetName()। नाम नाम के लिए नाम ' –

+0

@Dscoduc कौन सा वर्ग सर्वर है। मैपपाथ क्या आप विवरण साझा कर सकते हैं – Venkat

1

क्या लॉगर को एप्लिकेशन में वैश्विक या मुख्य विधि के माध्यम से प्रारंभ किया गया है? यह हो सकता है कि ग्लोबलकॉन्टेक्स्ट अभी तक शुरू नहीं हुआ है।

log4net.config विवरण::

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
    <File type="log4net.Util.PatternString" value="App_Data/%property{LogName}" /> 
    ... 
</appender> 

वैश्विक

+0

मैं LogManager.GetLogger कहा जाता है() संपत्ति स्थापित करने से पहले। साथ ही, लॉगिंग सही तरीके से काम कर रही है, बस यह कि फ़ाइल का नाम कस्टम मान नहीं उठा रहा है। –

13

फ़ाइल तत्व में प्रकार = log4net.Util.PatternString जोड़े

4

समस्या (मुझे लगता है कि) है आप (GetLogger) लकड़हारा प्राप्त है कि इससे पहले कि आप नाम की स्थापना की और config लोड ... की तरह लकड़हारा की घोषणा करने के लिए

कोशिश : private static log4net.ILog _pLog और फिर Application_Start में कार्य करें:

void Application_Start(object sender, EventArgs e) 
{ 
    // Set logfile name and application name variables 
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log"; 
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name; 

    // Load log4net configuration 
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config")); 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile); 

    //Get the loger 
    _pLog = log4net.LogManager.GetLogger("Global.asax"); 

    // Record application startup 
    pLog .Debug("Application startup"); 
} 

तो अनुक्रम है:

// Set logfile name and application name variables 
// Load log4net configuration 
// get the logger 
// Record application startup 
संबंधित मुद्दे