मैं एक जटिल वितरित सेवा विकसित कर रहा हूं जो पुनरावृत्ति सिंक्रनाइज़ेशन प्रक्रिया बनाता है। यह विभिन्न सूचना प्रणालियों में हर 10 सेकंड की व्यावसायिक संस्थाओं को सिंक्रनाइज़ करता है। एक पुनरावृत्ति में व्यावसायिक वस्तुओं की वर्तमान स्थिति (ग्राहकों, सामान, कुछ ग्राहक और माल विवरण इत्यादि की गिनती) को पुनः प्राप्त करने के लिए 3 डी पार्टी सेवा कॉल का समूह शामिल है, स्थानीय डीबी से पूछताछ करें और फिर उनके बीच मतभेद प्राप्त करें और इसे सुचारू बनाएं, इसे सिंक्रनाइज़ करें मतभेद।जटिल सिंक्रनाइज़ेशन प्रक्रिया को कैसे लॉग करें?
पुनरावृत्तियों के विभिन्न प्रकार हैं। वे तेज़ होते हैं (केवल वस्तुओं के सेट में परिवर्तन) और धीमे पुनरावृत्तियों (डेटा की पूर्ण समीक्षा)। फास्ट हर 10 सेकंड होते हैं और धीमे दिन में एक बार होते हैं।
तो, मैं एनएलओजी का उपयोग करके इस प्रक्रिया को कैसे लॉग कर सकता हूं? मैं डेटा संग्रह करने के लिए SQLite का उपयोग कर रहा हूँ। लेकिन मैं लॉग के लिए डीबी डिजाइन में फंस गया हूँ।
तो मैं हर यात्रा के प्रवाह को प्रवेश करना चाहते हैं: 3 डी पक्ष सेवा 2. क्वेरी वस्तुओं की वर्तमान स्थिति के लिए स्थानीय डेटाबेस के लिए वस्तुओं की वर्तमान स्थिति के लिए 1. अनुरोध 3. मतभेद सूची 4. आह्वान बाहरी जाओ अपर्याप्त डेटा 5 सेवा अपर्याप्त डेटा
के लिए स्थानीय डेटाबेस अपडेट करें लेकिन लॉग इन करने के लिए कई प्रकार की जानकारी है इसलिए मैं इसे केवल TEXT
फ़ील्ड में नहीं डाल सकता।
फिलहाल मैं लॉग के लिए इस तरह के ढांचे को उपयोग कर रहा हूँ:
CREATE TABLE [Log] (
[id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[ts] TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
[iteration_id] varchar,
[request_response_pair] varchar,
[type] VARCHAR NOT NULL,
[level] TEXT NOT NULL,
[server_id] VARCHAR,
[server_alias] VARCHAR,
[description] TEXT,
[error] Text);
तो हर सेवा अनुरोध और प्रतिक्रिया description
और request_response_pair
को कहते हैं हर अनुरोध के लिए हर प्रतिक्रिया जोड़ने के लिए एक महत्वपूर्ण है।
यहाँ मेरी NLog config है:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogFile="D:\nlog.txt" internalLogLevel="Trace">
<targets>
<target name="Database" xsi:type="Database" keepConnection="false"
useTransactions="false"
dbProvider="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.82.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
connectionString="Data Source=${basedir}\SyncLog.db;Version=3;"
commandText="INSERT into Log(iteration_id, request_response_pair, type, level, server_id, server_alias, description, error) values(@Iteration_id, @Request_response_pair, @Type, @Loglevel, @server_id, @server_alias, @Description, @Error)">
<parameter name="@Type" layout="${message}"/>
<parameter name="@Loglevel" layout="${level:uppercase=true}"/>
<parameter name="@Request_response_pair" layout="${event-context:item=request_response_pair}"/>
<parameter name="@Iteration_id" layout="${event-context:item=iteration_id}"/>
<parameter name="@server_id" layout="${event-context:item=server_id}"/>
<parameter name="@server_alias" layout="${event-context:item=server_alias}"/>
<parameter name="@Description" layout="${event-context:item=description}"/>
<parameter name="@Error" layout="${event-context:item=error}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="Database" />
</rules>
</nlog>
यहाँ मैं कैसे लॉग ऑन है:
namespace NLog
{
public static class LoggerExtensions
{
public static void InfoEx(this Logger l, string message, Dictionary<string, object> contextParams)
{
LogEventInfo eventInfo = new LogEventInfo(LogLevel.Info, "", message);
foreach (KeyValuePair<string, object> kvp in contextParams)
{
eventInfo.Properties.Add(kvp.Key, kvp.Value);
}
l.Log(eventInfo);
}
public static void InfoEx(this Logger l, string message, string server_id, string server_alias, Dictionary<string, object> contextParams = null)
{
Dictionary<string, object> p = new Dictionary<string, object>();
p.Add("server_id", server_id);
p.Add("server_alias", server_alias);
if (contextParams != null)
{
foreach (KeyValuePair<string, object> kvp in contextParams)
{
p.Add(kvp.Key, kvp.Value);
}
}
l.InfoEx(message, p);
}
}
}
मैं प्रवेश स्तर के बारे में पता है, लेकिन मैं यह सब वर्बोज़ लॉग जरूरत है, तो मैं जानकारी के रूप में यह लॉग इन करें। मुझे कोई जटिल, संरचित लॉग लॉग इन करने का कोई ट्यूटोरियल नहीं मिल रहा है। केवल सादा गूंगा लॉग मैसेज।
मुझे खेद है, लेकिन आपका प्रश्न वास्तव में क्या है? – Dirk
मैं लॉगिंग के लिए एंटरप्राइज़ लाइब्रेरी का उपयोग करता हूं। ईएल के साथ आप लॉग इन/ट्रेस ऑन कर सकते हैं: इवेंट व्यूअर, डाटाबेस, एक्सएमएल, फ्लैट फाइल, और बिना किसी परिवर्तन के आपके कोड पर, केवल आपके app.config (web.config) पर। आप प्रकार, प्राथमिकता, ect द्वारा फ़िल्टर भी कर सकते हैं। http://msdn.microsoft.com/en-us/library/ff648549.aspx – Max