問題タブ [boost-log]
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++ - カスタム ブースト ログ形式関数でのスコープ属性の形式設定
カスタム書式設定関数を使用しており、スコープ属性を書式設定する方法を見つけようとしています。私が見つけたブースト ドキュメントの例は、ラムダ式フォーマッタ用であり、フォーマッタ関数内でどのように使用するかわかりません。現在、timetamp などの属性を正常に使用していますが、スコープ属性は私をエスケープします。
boost - Boost::log::string_literal の構造の問題
ハードコーディングなしでマクロを使用しようとして失敗しましたBOOST_LOG_NAMED_SCOPE
(たとえば、 no BOOST_LOG_NAMED_SCOPE("bla")
, but BOOST_LOG_NAMED_SCOPE(some_variable)
; このマクロは、またはboost::log::string_literal
の C'tor を持たないa 内で使用します。受け入れる唯一のものは(NOT ) です-これは役に立ちません)ハードコーディングできないため、この値は関数から取得する必要があります。std::string
char*
const char[]
const char*
したがって、 or を使用して構築する方法を見つける必要がありますboost::log::string_literal
。std::string
またはchar*
、何らかの方法で編集する方法を見つける必要がありconst char[]
ます (また、 a を作成してchar[]
にキャストしようとしましたconst char[]
が、失敗しました)。
c++ - クラスごとに異なるブースト ログ シンク
ログをブーストするのは初めてです。
私のアルゴリズムには 4 つの主要なステップがあり、すべてのステップのログを 1 つのファイルに記録したいと考えています。だから私は4つのシンクを持っています。私の考えは、すべてのステップでシンクを変更できるということです。それは可能ですか?
現時点ではlooger.h
、グローバルロガーを使用しています
ステップごとにシンクを変更することは可能ですか?
c++ - 設定ファイルの使用時にブースト ログに重大度が表示されない、または重大度によるフィルタリングが行われない
以下を使用して、Boost Log ライブラリを構成ファイルで動作させようとしています。
方法。私は以下を使用します:
重大度を登録する方法ですが、これは何もしていないようです。コードを実行すると、次の出力が得られます。
1.[] 通常のメッセージ
2.[] 重大度の警告メッセージ
3.[] エラー重大度メッセージ
つまり、重大度がありません。このコード行を追加すると:
期待どおりに動作します。つまり、上記のようにログに記録されますが、重大度レベルが設定されています。ただし、構成ファイルで重大度によるフィルターを試行しても機能せず、ファイルに何も書き込まれません。これは、フィルターが「重大度」を認識していないため、このフィルターに一致するレコードがないことを意味します。
Boost Log を重大度で動作させ、init_from_stream メソッドを使用して重大度でフィルタリングするにはどうすればよいですか?
完全なソース コードは次のとおりです。
構成ファイルは次のようになります。
[シンク.フル]
宛先=テキストファイル
FileName=full.log
Format="%LineID%.[%Severity%] %Message%"
Filter="%Severity% > 3" # Filter = "%Severity% > info/error なども試しました...
c++ - コンプレッサー Boost::Iostreams フィルターを Boost::Log のシンクとして使用する方法
Boost Log ライブラリで作成したログファイルを を利用して瞬時に圧縮しようとしていますboost::iostreams::gzip_compressor
。したがって、 を呼び出すとBOOST_LOG()
、出力はオンザフライで圧縮されます。これが私がこれまでに試したことです:
どういうわけか、1)filtering_ostream全体をシンクとして配置するだけでなくfile
、
2) の代わりに logger シンクを何らかの方法でプッシュしfile
ますfiltering_ostream
。
誰かが私を正しい方向に向けることができますか? ありがとう!
c++ - Boost Log ランタイムの最適化
アプリケーションのロギング プラットフォームに Boost-Log とグローバル重大度ロガーを使用しています。プロファイリングboost::log::v2s_mt_posix::core::open_record
では、合計実行時間の最大 25% がかかる可能性があることが示されています。
多くのログ メッセージがありますが、重大度が低く、フィルター処理されているため、それほどコストがかかるとは思いません。
これらのメッセージを実行時にそれほどコストをかけないようにする方法はありますか? (繰り返しますが、フィルターをかけた場合でもオーバーヘッドは小さく、フィルターをかけない場合はもちろんオーバーヘッドが大きくなると思います)。
いくつかのラッパー マクロを作成することにより、コンパイル時にこれを「修正」するのは比較的簡単です。
サンプル作業コードで更新:
引数を指定して実行すると0
、ログ メッセージは出力されませんが、ログ メッセージをコメント アウトするよりも 2 倍 (!) 時間がかかります。
c++ - ブースト ログ - 重大度付きのテキスト形式
boost-users メーリング リストでこの質問をしましたが、残念ながら回答がありませんでした。うまくいけば、ここでより良い運が得られるでしょう。
形式をテキストで指定しようとしています (たとえば、コンパイルされた式を使用する代わりに、keywords::format = "blahblah")。
これは、再コンパイルする必要なく、コマンド ライン パラメーターまたは構成ファイルを使用して、フォーマットを簡単に再構成できるという考え方です。ただし、カスタムの severity_level 列挙を使用するときに %Severity% を指定すると、まったく出力されないようです。
boost_1_55_0/libs/log/example/keywords/main.cpp の例を見てください。
単純に 86 行目を次のように変更します。
解決しようとしていると思われる問題が表示されます。
私の疑いは、コアがカスタム Severity 属性を認識していないことです。これは、登録されておらず、%Severity% をどのフォーマッターにも解析できないためです。対照的に、以下の add_file_log は、コンパイルされた式を使用しているため、重大度レベルを正しく出力し、何を行う必要があるかを推測できます (その仮定で正しいでしょうか)?
独自の属性クラスを展開しないと、これを解決するために属性を追加できないようです。BOOST_LOG_ATTRIBUTE_KEYWORD で宣言された重大度に関連する属性またはフォーマッターを追加するにはどうすればよいですか? 次のように一致するように、123 行目の severity_logger のテンプレート パラメータを削除すると、次のようになることに注意してください。
次に、列挙型ではなく標準の int に発展し、出力は人間が読める文字列ではなく int として「正しく」表示されます。今のところはこれで問題ありませんが、もちろん、可能であれば人間が判読できるようにしたいと考えています。これは、boost_1_55_0/libs/log/example/settings_file/main.cpp の例のとおりです。