डिवाइस पर डेटा लॉग करना और लॉग को पुनः प्राप्त करना


82

Xcode में एक डिबग बिल्ड पर, चाहे मैं सिम्युलेटर या एक वास्तविक डिवाइस का उपयोग कर रहा हूं, NSLog, printf, fprintf assert और NSAssert बयान कंसोल पर निकलते हैं

अगर मैं अब डिवाइस पर एक रिलीज़ बिल्ड चलाऊं (कहूं कि मैं एक परीक्षण उड़ान का निर्माण करता हूं और इसे अपने iPhone पर बड़ा करता हूं; तो यह रिलीज बिल्ड होगा), इनमें से कौन सा (यदि कोई हो) रिकॉर्ड किया जा रहा है?

और मैं लॉग को कैसे पुनः प्राप्त करूं?

क्या NSLog वास्तव में रिलीज़ बिल्ड पर कुछ आउटपुट करता है? निर्धारण कारक क्या है? चाहे वह stdout या stderr को लिखना है? क्या केवल डिवाइस लॉग के लिए लिखा जाता है? क्या इसका मतलब है कि मुझे fprintf का उपयोग करना है? डिवाइस लॉग के लिए कुछ भी लिखा है? क्या ऐसा भी है? यदि हां, तो इसे कैसे उठाया जाए?

क्या कोई स्थिति स्पष्ट कर सकता है?


1
फ़ाइल के उपयोग के रूप में केवल आउटपुट को बचाने के लिए: stackoverflow.com/questions/28114110/…
किरण पी नायर

जवाबों:


94
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

application:didFinishLaunchingWithOptionsएप्लिकेशन प्रतिनिधि फ़ाइल में विधि के कोड के इस ब्लॉक को जोड़ें और यह iPhone पर ऐप डॉक्यूमेंट डायरेक्टरी में एक लॉग फ़ाइल बनाएगा जो सभी कंसोल इवेंट ईवेंट्स को लॉग करता है। कंसोल की सभी घटनाओं को देखने के लिए आपको आईट्यून्स से इस फाइल को आयात करना होगा।

नोट: .plist फ़ाइल में यह सुनिश्चित है कि Application supports iTunes file sharingमौजूद है और YESताकि आप iTunes के माध्यम से एक्सेस कर सकें।

लॉगफ़ाइल्स प्राप्त करने के लिए: अपने डिवाइस से कनेक्ट होने के बाद, लॉन्च इट्यून्स लॉन्च करें - अपने ऐप का चयन करें - ऑगमेंट दस्तावेज़ में आपको अपनी फ़ाइल मिल जाएगी। फिर आप इसे अपनी डिस्क पर सहेज सकते हैं


1
यह कैसे काम करता है? .logदस्तावेज़ निर्देशिका में एक फ़ाइल होने से, iOS आपके कंसोल आउटपुट को वहां लिखता है?
अली

2
लीक डिस्क मेमोरी को रोकने के लिए प्रोग्राम फाइल को प्रोग्राम डेट द्वारा कैसे डिलीट करें?
hkaraoglu

4
यकीन नहीं है कि NSDocumentDirectoryलॉग फ़ाइलों के लिए उपयुक्त है - यह आमतौर पर उपयोगकर्ता की स्वयं की जेनरेट की गई सामग्री के लिए होता है, लेकिन लॉग फाइलें ऐप सपोर्ट कंटेंट होती हैं, इसलिए शायद वे इन NSLibraryDirectory/ लॉग उपनिर्देशिका से संबंधित हों ।
जस्टमार्टिन

मैं विंडोज़ पीसी से लॉग विवरण कैसे निर्यात कर सकता हूं?
विनेश टीपी

1
@ यदि यह लिखने के लिए एक फ़ाइल खोलने के लिए stderr (मानक त्रुटि आउटपुट) फ़ाइल डिस्क्रिप्टर (यानी फ़ाइल डिस्क्रिप्टर 2) को जोड़कर काम करता है। तो हर बार जब आप stderr पर प्रिंट करते हैं, तो यह फ़ाइल के बजाय प्रिंट करता है। इस तरह, आप एप्लिकेशन के स्टैडर आउटपुट को पकड़ लेते हैं। लॉग सिस्टम इसके बारे में कुछ नहीं जानता है।
अम्मो गोएत्श

140

Xcode 6.1.1 में, आप निम्नलिखित करके NSLog आउटपुट देख सकते हैं। हालाँकि, मुझे यकीन नहीं है कि यह आपको बहुत समय पहले से लॉग देखने देता है। मैंने केवल इसे कुछ घंटों तक वापस देखा है।

किसी भी मामले में, यहाँ कदम हैं:

  1. Xcode में, Window -> Devices पर जाएं।
  2. बाएं पैनल में अपने डिवाइस का चयन करें।
  3. नीचे दिए गए स्क्रीनशॉट में दिखाए अनुसार थोड़ा तीर क्लिक करें।

यहाँ छवि विवरण दर्ज करें


3
यह सही उत्तर होना चाहिए ... मैंने लॉग बटन देखने के लिए आधा घंटा बिताया। अपना समय बचाने के लिए धन्यवाद ...
प्राइमरीचैन

1
बस NSLog। वहाँ cout या प्रिंटफ की अपेक्षा न करें।
किरण

10
आप इस तकनीक का उपयोग करके उत्पादन / सबमिट किए गए एप्लिकेशन से लॉग प्राप्त नहीं कर सकते। यह केवल डिबगिंग के दौरान उपयोगी है।
सत्यम

7
आपने मेरा दिन बना दिया, एकदम सही उदाहरण कि यूआई को कैसे डिज़ाइन किया जाए, शायद उन्हें developer.apple.com/library/mac/documentation/UserExperience/…
Hofi

1
आपने अभी-अभी मेरी बेकन को बचाया। एक बग का पीछा करते रहे हैं जो केवल रिलीज़ संस्करण में दिखाई देता है, लॉग ने समस्या का खुलासा किया। मैंने उसी संवाद को देखा था और छोटे तीर पर क्लिक करने के बारे में कभी नहीं सोचा था, जो स्पष्ट रूप से "लाइव डिवाइस लॉग दिखाने" के लिए एक सार्वभौमिक प्रतीक है। धन्यवाद!
चाकुल जूल 26'15

23

स्विफ्ट 3.0 में, शील का कोड बदल जाएगा,

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let fileName = "\(Date()).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName)
freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)

अन्य सभी प्रक्रियाएं समान हैं जिन्हें शील द्वारा समझाया गया है

बस एप्लिकेशन में कोड के इस ब्लॉक को जोड़ें: app प्रतिनिधि फ़ाइल में didFinishLaunchingWithOptions विधि और यह iPhone पर ऐप दस्तावेज़ निर्देशिका में एक लॉग फ़ाइल बनाएगा जो सभी कंसोल लॉग ईवेंट लॉग करता है। कंसोल की सभी घटनाओं को देखने के लिए आपको आईट्यून्स से इस फाइल को आयात करना होगा।

नोट: .plist फ़ाइल में यह सुनिश्चित होता Application supports iTunes file sharingहै कि मौजूद है और YESआप iTunes के माध्यम से उपयोग कर सकते हैं ताकि यह निर्धारित हो ।

लॉगफ़ाइल्स प्राप्त करने के लिए: अपने डिवाइस से कनेक्ट होने के बाद आईट्यून्स लॉन्च करें, ऐप्स चुनें - अपना ऐप चुनें - ऑगुमेंट दस्तावेज़ में आपको अपनी फ़ाइल मिल जाएगी। फिर आप इसे अपनी डिस्क पर सहेज सकते हैं


अगर मैं गलत हूं तो मुझे सही करें: यह लॉग की निर्देशिका को बदल देता है जिसका अर्थ है कि यह मूल रूप से लिखा गया है /var/db/diagnostics/। देखें यहाँ
हनी

@, यह लॉग ऐप दस्तावेज़ निर्देशिका में सहेजा जाएगा।
किरण पी नायर

एप्लिकेशन लॉन्च होने पर यह कोड हमेशा एक नई फ़ाइल
बनाता है

किसी भी विचार कैसे काम पाने के लिए जब लॉग वॉच एक्सटेंशन के भीतर निष्पादित किया जाता है?
user2623825

1
@ किरनपीनेयर - क्या मैं प्रिंट के लिए ऐसा कर सकता हूं () बयान या सिर्फ NSLog?
फ्राई

12

NSLog को प्रोडक्शन रिलीज़ में डिवाइस लॉग के लिए लिखा गया है और आप अपने आईफोन को अपने सिस्टम से कनेक्ट करके और ऑर्गनाइज़र का उपयोग करके इसे चेक कर सकते हैं। आयोजक में अपने iPhone का चयन करें, डिवाइस लॉग पर क्लिक करें। आपको लॉग में सभी NSLog आउटपुट दिखाई देंगे।


4
अद्यतन: Xcode 6 में डिवाइस लॉग के माध्यम से NSLog आउटपुट को पढ़ना संभव नहीं है। विंडो> आयोजक अब उपकरणों को सूचीबद्ध नहीं करता है। विंडो के बजाय> डिवाइस डिवाइसेस को सूचीबद्ध करता है, लेकिन केवल क्रैश लॉग प्रदर्शित करता है।
राबर्ट

1
रॉबर्ट, विंडो पर> Xcode 6 की डिवाइस स्क्रीन स्क्रीन के निचले किनारे के पास एक अदृश्य रेखा है। यदि आप इसे ऊपर खींचते हैं तो आपको अपने चयनित डिवाइस का कंसोल लॉग दिखाई देगा। यह Xcode मुझे लगता है कि एक UI बग के कारण अदृश्य है।
०१:०१ पर ४/१४

7

मुझे APPLE का यह लिंक बहुत जानकारीपूर्ण और पूर्ण लगा। यह आपको डिवाइस के लॉग को देखने या एक्सेस करने के सभी विकल्प देता है, चाहे वे आपके देव मशीन से जुड़े हों या नहीं।

https://developer.apple.com/library/ios/qa/qa1747/_index.html


1
यह दस्तावेज़ आश्चर्यजनक रूप से पुराना है। इसमें केवल xCode 6 का उल्लेख है। विधि XCode 9 और 10 के लिए पूरी तरह से अलग है
1800 सूचना

2

हां, डिवाइस पर NSLog आउटपुट। आप देख सकते हैं कि यह आपके मैक से जुड़े डिवाइस के साथ आउटपुट है और Xcode ऑर्गनाइज़र टूल का उपयोग कर रहा है।


क्या उपयोगकर्ता के लिए iTunes के माध्यम से इन लॉग का निरीक्षण करना संभव है?
पी आई

3
यह उत्तर stackoverflow.com/questions/2334664/… कह रहा है कि iPhone कॉन्फ़िगरेशन उपयोगिता डिवाइस से कंसोल लॉग निर्यात करना संभव है
डेनिस


2

मुझे पता है कि यह एक पुराना धागा है, लेकिन आप डिवाइस लॉग में भी जा सकते हैं:

सेटिंग्स -> गोपनीयता -> विश्लेषिकी -> डेटा

उममीद है कि इससे मदद मिलेगी

सादर


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.