2014-09-11 4 views
6

एनएसएलओजी() मिलीसेकंद रिज़ॉल्यूशन के साथ टाइमस्टैम्प का उपयोग करता है, लेकिन यह एक ब्लंट वाद्य यंत्र है क्योंकि इसके सभी लॉग संदेश चेतावनी स्तर पर हैं।ऐप्पल सिस्टम मिलीसेकंड में लॉग टाइम?

ऐप्पल सिस्टम लॉग 8 अलग-अलग स्तरों के साथ एक और अधिक बढ़िया प्रणाली है। लेकिन ... इसके टाइमस्टैम्प में केवल 1-सेकंड का संकल्प है। मैंने समय प्रारूप के बारे में मैन पेज पढ़ा, लेकिन वे सभी केवल दूसरे के लिए प्रतीत होते हैं।

स्पष्ट रूप से यह जानकारी उपलब्ध है, कम से कम NSLog तक। एक सेकंड में बहुत कुछ चल सकता है; एएसएल के साथ बेहतर समाधान पाने का कोई तरीका है?

+1

'Console.app' में 'देखें'> 'मिलीसेकंड' चुनें। –

+2

यह बढ़िया है, कभी नहीं देखा। हालांकि, यह एक्सकोड कंसोल लॉग को प्रभावित नहीं करता है। यह एक नया सवाल उठाता है: जहां सभी लॉग फाइलों में सिम्युलेटर या आईओएस डिवाइस पर चल रहे आईओएस डिवाइस के लिए एक्सकोड के लॉग हैं? –

+1

मेरा मानना ​​है कि इसका स्थान '~/लाइब्रेरी/लॉग/आईओएस सिम्युलेटर/ /' –

उत्तर

0

आप परिशुद्धता निर्दिष्ट करने के लिए एएसएल (और syslog) में समय प्रारूप में ".#" जोड़ सकते हैं। इस प्रकार "utc.3" यूसीटी प्रारूप में मिलीसेकंड के साथ प्रारूपित होगा। आप इसे msg_fmt या time_fmt तर्क दोनों में जोड़ सकते हैं।

समय प्रारूप परिशुद्धता केवल syslogd(1) में प्रलेखित होने लगती है। मुझे यकीन नहीं है कि यह asl(3) पर क्यों नहीं आया।

उदाहरण के लिए

, time_fmt में asl_add_output_file और निर्दिष्ट का उपयोग करते हुए इस प्रकार दिखाई देंगे:

// setup, do once! 
aslclient log = asl_open(NULL, NULL, 0); 
asl_add_output_file(log, STDERR_FILENO, 
    "$Time $((Level)(str)) - $Message", // $Time here uses time_fmt arg on next line 
    ASL_TIME_FMT_UTC ".3", // time_fmt: append ".3" for milliseconds here 
    ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG), ASL_ENCODE_SAFE); 

// example log 
asl_log(log, NULL, ASL_LEVEL_INFO, "Hello"); 

// Note in the above ASL_TIME_FMT_UTC is #defined to "utc", so the we're 
// using compile-time string concatenation of "utc" ".3" to "utc.3". 
// Alternately you can just specify "utc.3" directly. 

और आउटपुट:

:

2016-02-01 19:16:39.561Z Info - Hello 

asl_add_output_file की msg_fmt तर्क में निर्दिष्ट इस प्रकार दिखाई देंगे

// setup, do once! 
aslclient log = asl_open(NULL, NULL, 0); 
asl_add_output_file(log, STDERR_FILENO, 
    // in msg_fmt below, use ISO8601 + ".6" for microseconds 
    "$((Time)(ISO8601.6)) $((Level)(str)) - $Message", 
    ASL_TIME_FMT_UTC, 
    ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG), ASL_ENCODE_SAFE); 

// example log 
asl_log(log, NULL, ASL_LEVEL_INFO, "Hello"); 

एक घ उत्पादन:

2016-02-01T14:16:39.562030-05 Info - Hello 

(मैं सावधानी होता है कि कोड के ऊपर स्निपेट का उपयोग केवल एएसएल में समय प्रारूप परिशुद्धता को निर्दिष्ट प्रदर्शित करने के लिए होती हैं। वास्तविक उपयोग में dispatch_once सेटअप के लिए संभवतः लॉगिंग के लिए एक सीरियल प्रेषण कतार का उपयोग करना चाहिए।)

संबंधित मुद्दे