2016-08-26 8 views
7

कोड विकसित करते समय, मेरे पास कई कंसोल लॉगिंग (std::clog) और कुछ कंसोल आउटपुट (std::cout) हैं। लेकिन अब, मैं अपने स्रोत कोड के ऑनलाइन प्रस्तुत करना चाहता था और मैं सभी सांत्वना प्रवेश (clog) को अक्षम लेकिन सांत्वना उत्पादन रखना चाहते हैं (cout)स्रोत कोड से std :: क्लॉग लॉगिंग को अक्षम कैसे करें?

मैं निश्चित रूप से मेरी //std::clog के सभी टिप्पणी कर सकते हैं, लेकिन है कि वहाँ एक मेरी स्रोत फ़ाइल के अंदर सभी लॉगिंग अक्षम करने का बेहतर तरीका ,?

+3

क्या [यह उत्तर] (http://stackoverflow.com/a/30185095/3233393) आपकी समस्या के अनुरूप है? – Quentin

+1

वैकल्पिक रूप से, 'std :: filebuf f; ऑटो पुरानी = std :: clog.rdbuf (&f); 'मुख्य और' std :: clog.rdbuf (पुराना) की शुरुआत में; अंत में चाल चल सकती है। –

+1

@Quentin यह 'std :: clog.setstate काम करता है (std :: ios_base :: failbit); 'केवल' क्लोग 'संदेशों को हटाएं, और अभी भी' cout' को रखें। धन्यवाद ... (क्या आप इसे उत्तर के रूप में लिख सकते हैं)। – Yeo

उत्तर

7

आप क्लोग को रीडायरेक्ट कर सकते हैं, अपना स्वयं का स्ट्रीम बना सकते हैं और rdbuf फ़ंक्शन का उपयोग कर सकते हैं।

std::ofstream nullstream; 
std::clog.rdbuf(nullstream.rdbuf()); 
1

Andreas Papadopoulos' answer से एक अलग सवाल पर कॉपी किया गया - उसे वहाँ वोट दें सुनिश्चित करें!


ज़रूर, आप कर सकते हैं (example here):

int main() { 
    std::clog << "First message" << std::endl; 

    std::clog.setstate(std::ios_base::failbit); 
    std::clog << "Second message" << std::endl; 

    std::clog.clear(); 
    std::clog << "Last message" << std::endl; 

    return 0; 
} 

आउटपुट:

First message 
Last message 

इसका कारण यह है fail राज्य में धारा डाल यह चुपचाप किसी भी उत्पादन त्यागें, जब तक कर देगा असफलता साफ़ हो गई है।

+0

रिकॉर्ड के लिए, मैंने यह सीडब्ल्यू जवाब दिया है क्योंकि लिंक किया गया प्रश्न अलग है (यह स्ट्रीम को बहाल करने के बारे में भी पूछता है), यह भी इस के रूप में प्रस्तुत नहीं किया गया है, और स्वीकृत उत्तर इसे हल करने की बजाय समस्या को रोकता है। – Quentin

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