2012-11-29 31 views
7

मैंने एक विंडोज सेवा विकसित की है जिसमें मैं कुछ निर्धारित कार्यों को करने के लिए टाइमर नियंत्रण का उपयोग कर रहा हूं। टाइमर एलिप्स इवेंट प्रत्येक 5 मिनट में होता है जिसमें लॉग 4net एपेंडर का उपयोग ओरेकल डेटाबेस में लॉग प्रविष्टि किया जाता है।log4net एडोनेट एपेंडर कनेक्शन समस्या

डीबी सर्वर रात के ठंडे बैकअप के लिए सभी कनेक्शन बंद होने तक सभी ठीक काम करता है। चूंकि उस समय डीबी में सभी लॉग चूक गए हैं और जब तक बैकअप प्रक्रिया 30 मिनट से कम नहीं होती है, तब भी सेवा को पुनरारंभ नहीं किया जाता है।

अन्य पोस्टों से मैंने पाया कि log4net केवल एक कनेक्शन का उपयोग करता है जो खो गया है तो सभी बाद के लॉग को त्याग दिया जाता है। इसका समाधान करने के लिए मैंने अपनी कॉन्फ़िगरेशन में रिकॉन्क्टऑनरर एट्रिब्यूट सेट को सही के रूप में सेट करना शुरू कर दिया। लेकिन दुर्भाग्यवश, मुद्दा अभी भी वहां है। बैकअप के बाद लॉग अभी भी गायब हैं। मैंने ट्रेसिंग सक्षम की और निम्नलिखित त्रुटियों को पाया लेकिन मुझे नहीं पता कि इस समस्या को कैसे हल किया जाए।

log4net: त्रुटि [CustomAdoNetAppender] अपवाद जबकि डेटाबेस के लिए Oracle.DataAccess.Client.OracleException ORA-03,113 लेखन: अंत फ़ाइल Oracle.DataAccess.Client.OracleException.HandleErrorHelper पर संचार चैनल पर (Int32 errCode , OracleConnection कोन, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, वस्तु src, स्ट्रिंग प्रक्रिया) Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode, OracleConnection कोन, स्ट्रिंग प्रक्रिया, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, वस्तु src) पर पर Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() log4net.Appender.AdoNetAppender.SendBuffer (IDbTransaction dbTran, LoggingEvent [] ईवेंट)log4net.Appender.AdoNetAppender.SendBuffer पर 210 (LoggingEvent [] घटनाओं)

और:

log4net: त्रुटि [CustomAdoNetAppender] अपवाद जबकि डेटाबेस के लिए लिख System.InvalidOperationException: कनेक्शन पहले से ही का हिस्सा है एक स्थानीय या System.Data.Common.DbConnection.System.Data पर एक वितरित लेनदेन Oracle.DataAccess.Client.OracleConnection.BeginTransaction (isolationLevel isolationLevel) पर Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction (isolationLevel isolationLevel) पर। IDbConnection.BeginT ransaction() log4net.Appender.AdoNetAppender.SendBuffer पर (LoggingEvent [] घटनाओं)

इस अत्यधिक सराहना की पर कोई मदद !!

उत्तर

3

व्यक्तिगत रूप से मैं इसे log4net AdoNetAppender में एक बग मानता हूं।

लॉग 4net में 1.2.11 AdoNetAppender कनेक्शन पूलिंग का उपयोग करने के बजाय खुले कनेक्शन को रखने के मुख्य पाप को करता है।

इसके अलावा ReconnectOnError विकल्प टूटा हुआ दिखता है: यह केवल यदि वर्तमान कनेक्शन राज्य नहीं ConnectionState.Open है, जो गलत लगता है फिर से कनेक्ट करने का प्रयास करता है: मैं नहीं मानता कि कनेक्शन स्थिति परिवर्तन जब एक त्रुटि (enum मूल्य ConnectionState.Broken कर दिया गया है एमएसडीएन में उत्पाद के भविष्य के संस्करणों के लिए आरक्षित होने के रूप में दस्तावेज है)।

सब कुछ, मैं आपको अपने स्वयं के कस्टम एपेंडर को लागू करने की सलाह दूंगा जो कनेक्शन पूलिंग को सही तरीके से कार्यान्वित करता है। यह एक बहुत बड़ी कक्षा नहीं है इसलिए डुप्लिकेट और फिक्स करना आसान होगा।

+0

उत्तर के लिए धन्यवाद। क्या कहीं भी या कस्टम एपेंडर में लॉग 4नेट अपवादों को पकड़ना संभव है? – Lucky