問題タブ [clog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - なぜ私の変化が下駄スティックにならないのですか?
C++ の細かい点を理解できていないと思います。私のプログラムが何をするかのログを設定しstd::clog
たいのですが、理論的には私が望むことをしているように見えますが、実際にはそうではありません。
次のようにすると、clog は期待どおりに動作し、「テスト 1」を画面に書き込み、「テスト 2」がファイルに表示されます。
しかし、それをすべてクラスに入れると、「テスト 1」が画面に書き込まれ、test.log が作成されますが、内部には何もなく、「テスト 2」はどこにもありません!:
私は何が欠けていますか?
編集:後者をvalgrindで実行すると、次のようなエラーが発生します(前者はクリーンに実行されます):
私 (あまり一般的でないプログラマー) がこのような単純なプログラムでコンパイラのバグを見つけたと考えるほど不快ではありませんが、これは私をさらに混乱させ、valgrind は明らかに後者が何らかの形で間違っていることを発見します。それらは機能的に同一です。
c++ - clog to tee を元の clog とログ ファイルに再定義する方法は?
ここで便利なスタートを見ました:
http://www.cs.technion.ac.il/~imaman/programs/teestream.html
また、clog とログ ファイルの両方に送られる新しいストリームを作成すると、うまく機能します。
ただし、 clog を新しいストリームに再定義しようとしても、新しいストリームには clog と同じ rdbuf() があるため、機能しません。したがって、以下は効果がありません。
では、clog のターゲットとなる独自の rdbuf() を持つように tee クラスを変更するにはどうすればよいでしょうか?
ありがとう。
-ウィリアム
c++ - clog の rdbuf() を再定義して、clog の元の rdbuf() とログ ファイルのティーにする方法は?
C++ 組み込みの clog を再定義して、元の clog.rdbuf() のティーとして処理される新しい関連付けられた rdbuf() とログへの ofstream オブジェクトの rdbuf() を使用する方法の例を誰かが持っていますか?ディスク上のファイル。
目的は、コード全体で std::clog を使用することですが、デフォルトの clog 宛先とディスク上のログ ファイルの両方に移動するようにすることです。
ありがとう。
-ウィリアム
c++ - C ++ std::clogをUnixのsyslogにリダイレクトします
私はUnixで、syslogにメッセージを送信するC++プログラムで作業しています。
現在のコードは、printfのように機能するsyslogシステムコールを使用しています。
ここでは、代わりにその目的でストリームを使用することをお勧めします。通常は、組み込みのstd::clogです。しかし、clogは出力をsyslogではなくstderrにリダイレクトするだけであり、他の目的にもstderrとstdoutを使用しているため、これは私には役に立ちません。
別の回答で、 rdbuf ()を使用してファイルにリダイレクトするのは非常に簡単であることがわかりましたが、openlogはストリームを結び付けるために使用できるファイルハンドラーを返さないため、syslogを呼び出すためにそのメソッドを適用する方法がわかりません。 。
それを行う別の方法はありますか?(UNIXプログラミングではかなり基本的に見えます)?
編集:外部ライブラリを使用しないソリューションを探しています。@Chrisが提案していることは良いスタートかもしれませんが、受け入れられる答えになるにはまだ少し曖昧です。
編集:私のプロジェクトはとにかくBoostをすでに使用しているので、Boost.IOStreamsを使用しても問題ありません。
外部ライブラリとのリンクは可能ですが、GPLコードであるため問題にもなります。依存関係は、他のコンポーネントと競合したり、Linuxディストリビューションで利用できなかったり、サードパーティのバグを導入したりする可能性があるため、負担にもなります。これが唯一の解決策である場合、ストリームを完全に回避することを検討できます...(残念)。
c++ - cerr と clog の両方を共有ログ ファイルの両方の tee に再定義する方法は?
ここに関連する質問は、clog だけでこれを行う方法を示しています。
clog to tee を元の clog とログ ファイルに再定義する方法は?
問題は、同時に cerr に対してもこれを行う方法です。上記の質問では、cerr への出力は、それが必要なログ ファイルにも出力されません。
目標は、clog または cerr のいずれかに送られるものはすべて一度ログ ファイルに記録されるようにすることです。そのため、clog と cerr の両方を共有ログ ファイルに関連付ける必要があります。
c++ - C ++の数値に先行ゼロを出力するために、どのディレクティブをストリームに与えることができますか?
私はそれを16進数にする方法を知っています:
myNumに1桁しか必要ない場合は、常に先行ゼロを出力するようにします。
では、実際にこれを行うにはどうすればよいですか?
c++ - ディスクがいっぱいになったために未処理の例外を検出する方法は?
アプリケーションでディスクがいっぱいになるというエラーが発生し、何らかの理由でディスクがいっぱいになった結果、未処理の例外がスローされ、set_terminate()
ハンドラーが呼び出されました。
通常、ログ ファイルに何らかのスタック トレースが記録されるので、何が問題なのかを確認できますが、この場合、ディスクがいっぱいだったため、スタック トレースが記録されず、プログラムが原因で終了したことは明らかではありません。ディスク容量の不足。
ディスクに最後に書き込まれたものから私ができることを読むと、ディスクにstd::clog
移動するように設定されている(いっぱいになったもの)に書き込まれているようです。
operator<<
write toを使用すると例外がスローされる可能性があるかどうか疑問に思ってclog
います。もしそうなら、どの例外がスローされた可能性がありますか?
さらに、将来この状態が再発した場合にアプリケーションを更新して、ディスクがいっぱいであり、ディスクがいっぱいであったことを知ることができるように、アプリケーションを更新して正確に何が問題だったのかをより適切に追跡できるようにする方法についてのアイデアに興味があります。アプリケーションの他の欠点ではありません。
ただし、重要な問題は障害の検出であり、それがなければ、緩和方法のアイデアは役に立ちません。
c++ - C++ での clog と cerr の使用時期と違い
C++ でstd::clog
andを使用するのはいつですか?std::cerr
clog << "test" << endl;
とはどう違いcerr << "test" << endl;
ますか?
clog << "0"
バッファなしendl
で直接印刷しませんか?