मेरे पास एक बहु थ्रेडेड सी # .NET 4.5 एप्लिकेशन चल रहा है।एनएलओजी लॉग संदेश छोड़ रहा है। .NET मुद्दा? मल्टी-थ्रेड मुद्दा?
मेरे स्थानीय विंडोज 7 लैपटॉप पर चल रहा है, एनएलओजी मेरे सभी संदेशों को लॉग करता है। मैं विजुअल स्टूडियो का उपयोग करके ऐप प्रकाशित करता हूं ... प्रकाशित ऐप को Windows Server 2008 में कॉपी करें ... और सर्वर पर ऐप चलाएं: परिणामस्वरूप लॉग संदेश लॉग इन हो जाते हैं। क्या कोई मुझे समझने में मदद कर सकता है कि क्यों और मैं इसे कैसे ठीक कर सकता हूं या एनएलओजी के विकल्प का सुझाव दे सकता हूं?
मैं बिना इस की कोशिश की है "async = सच"
<targets async="true">
<target xsi:type="ColoredConsole"
name="ColoredConsole"
layout="${date} ${level} ${message} ${event-context:item=AlgID} " />
<target name="xmlfile" xsi:type="File"
fileName="C:\QRT\Logs\LogEmiter.Nlog.xlog" keepFileOpen="true"
layout="${log4jxmlevent}" />
<target xsi:type="File"
name ="LogFile" fileName="C:\QRT\Logs\QRTLog-${shortdate}.log"
layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${threadid}|${threadname}|${event-properties:item=FromID}|${message}${exception:format=tostring} "/>
<target xsi:type="File"
name ="TapeLogFile" fileName="C:\QRT\Logs\QRTMarketLog.txt"
layout ="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${message}"/>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name ="TapeLogFile" minlevel="Trace" writeTo="TapeLogFile" />
<logger name ="TapeLogFile" minlevel="Trace" writeTo="ColoredConsole" final="true"/>
<logger name="*" minlevel="Trace" writeTo="ColoredConsole" />
<logger name="*" minlevel="Trace" writeTo="xmlfile" />
<logger name="*" minlevel="Trace" writeTo="LogFile" />
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
</rules>
</nlog>
मैं संदेशों इस तरह से लॉग इन करें:
मेरे विन्यास फाइल इस प्रकार है
मेरी ठेठ कक्षा में, मैं करूंगा मेरे एनएलओजी हेल्पर क्लास को इस प्रकार शुरू करें:
private void InitliazlieLogger()
{
LogManager.ThrowExceptions = true;
m_logger = new NLogHelper(LogManager.GetCurrentClassLogger());
m_logger.Set("FromID", "Email"); // Class setting.
}
private void DoSomething(int _x)
{
m_logger.Debug ("Print this statement: {0}", _x);
}
मेरे पास एक एनएलओजी सहायक वर्ग है ...
public NLogHelper(Logger Logger)
{
m_logger = Logger;
m_properties = new Dictionary<string, object>();
}
public void Debug(string Message, params object[] Args)
{
m_logger.Debug()
.Message(Message, Args)
.Properties(m_properties)
.Write();
notify(Severity.Debug, Message);
}
समस्या यह है कि कुछ लॉग संदेश बस छोड़ दिए गए हैं। मैंने अपनी खुद की लॉगिंग क्लास को जोड़ा जो फ़ाइल को मैन्युअल रूप से लिखा गया था और एनएलओजीहेल्पर.डेबग में एक कॉल डाला गया था और मैंने पाया कि मैंने जिस फाइल को मैन्युअल रूप से लिखा था, उसके पास लॉग संदेशों का एक पूरा सेट था लेकिन एनएलओजी आउटपुट कुछ गायब था।
फिर से, यह मेरे लैपटॉप पर काम करता है, लेकिन विंडोज सर्वर 2008 पर विफल रहता है। मेरे सर्वर में .NET 4.6.1 स्थापित है। मुझे लगता है कि मेरे विंडोज 7 मशीन पर केवल 4.5.2 है। क्या यह हो सकता है?
एक साइड नोट के रूप में: यदि मैं अपनी सभी स्रोत फ़ाइलों को सर्वर अपलोड करता हूं और सर्वर पर विजुअल स्टूडियो का उपयोग उसी कोड को संकलित करने के लिए करता हूं, तो एनएलओजी काम करता है?!
- कॉन्फ्यूज्ड।
धन्यवाद एड
'm_logger.Debug()' लॉग इन करेगा जब स्रोत DEBUG मोड में होगा। यही है ना? इसका अर्थ यह है कि जब आप अपने सर्वर पर अपना स्रोत प्रकाशित करते हैं, तो उन बाइनरी रिलीज मोड में चल रही हैं। इसका मतलब है कि यह लॉगिंग के बयान को छोड़ देगा। क्या आपको नहीं लगता? – Savaratkar
और आपने उल्लेख किया है कि, आपके सर्वर पर आपने अपना स्रोत वीएस से चलाया है, इस प्रकार आप इसे DEBUG मोड में फिर से चलाएंगे। सही? – Savaratkar
आप सही हैं। मैंने सर्वर पर चलाने के कई तरीकों की कोशिश की है। मैंने पाया है कि "रिलीज" के लिए लक्ष्य प्रणाली पर "स्थापना" की आवश्यकता होती है जिससे कॉन्फ़िगरेशन फ़ाइल को ढूंढना मुश्किल हो जाता है, इसलिए अब मैं पूरी बिन/डीबग निर्देशिका की प्रतिलिपि बना रहा हूं। वैसे भी, Logger.Debug लॉग काम किया। यह Logger.Info था जो गायब थे। –