Home interception and processing of stdout
Reply: 0

interception and processing of stdout

user46484 Published in September 19, 2018, 3:46 am

I have a task to make some kind of logger application and integrate it in source code of already existing programm on linux.
There are lots of std::cout in it. So, I need to intercept them, add information like name of function from which it was called and send all of this to log function. There are several threads already and I want to avoid creating another one.

Main question: "how can I bind cout call to log function call whithout changing all source code? I need to get final string from cout and send it to logger."

So I'll be glad to get any information, suggestion, ideas and advices. Thank you.

share|improve this question
  • i dont understand what threads and mutexes have to do with your question. If the code was thread safe before with printing to std::cout then this wont change by writing to a different stream. – user463035818 Jan 12 at 11:23
  • One question per question please. As-is it is unclear what the problem is. Please take the tour and read the help page. Welcome to SO. – Ron Jan 12 at 11:28
  • Could be a duplicate of this or this. Or simply google "redirect std::cout" – Jabberwocky Jan 12 at 11:28
  • I mean that I really don't know how it's realized in full programm, safe or not. If I'll just redirect cout to stringstream it can cause problems if several threads write something to it in same time. As I think at least. – Ivan Jan 12 at 11:31
  • You can the freopen in the first line of main to direct all stdout to a file. – mahdi_12167 Jan 12 at 13:33

active oldest votes

Your Answer

StackExchange.ifUsing("editor", function () { StackExchange.using("externalEditor", function () { StackExchange.using("snippets", function () { StackExchange.snippets.init(); }); }); }, "code-snippets"); StackExchange.ready(function() { var channelOptions = { tags: "".split(" "), id: "1" }; initTagRenderer("".split(" "), "".split(" "), channelOptions); StackExchange.using("externalEditor", function() { // Have to fire editor after snippets, if snippets enabled if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using("snippets", function() { createEditor(); }); } else { createEditor(); } }); function createEditor() { StackExchange.prepareEditor({ heartbeatType: 'answer', convertImagesToLinks: true, noModals: false, showLowRepImageUploadWarning: true, reputationToPostImages: 10, bindNavPrevention: true, postfix: "", onDemand: true, discardSelector: ".discard-answer" ,immediatelyShowMarkdownHelp:true }); } });
StackExchange.ready( function () { StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f48225227%2finterception-and-processing-of-stdout%23new-answer', 'question_page'); } );

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged c++ redirect stream or ask your own question.

StackExchange.ready(function () { StackExchange.responsiveness.addSwitcher(); }) (function(i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m); })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); StackExchange.ready(function () { StackExchange.ga.init({ sendTitles: true, tracker: window.ga, trackingCodes: [ 'UA-108242619-1' ] }); StackExchange.ga.setDimension('dimension2', '|c++|redirect|stream|'); StackExchange.ga.setDimension('dimension3', 'Questions/Show'); StackExchange.ga.trackPageView(); }); /**/ var _qevents = _qevents || [], _comscore = _comscore || []; (function() { var ssl = 'https:' == document.location.protocol, s = document.getElementsByTagName('script')[0], qc = document.createElement('script'); qc.async = true; qc.src = (ssl ? 'https://secure' : 'http://edge') + '.quantserve.com/quant.js'; s.parentNode.insertBefore(qc, s); _qevents.push({ qacct: "p-c1rF4kxgLUzNc" }); /**/ var sc = document.createElement('script'); sc.async = true; sc.src = (ssl ? 'https://sb' : 'http://b') + '.scorecardresearch.com/beacon.js'; s.parentNode.insertBefore(sc, s); _comscore.push({ c1: "2", c2: "17440561" }); })();
You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.378837 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO