2

boost-users メーリング リストでこの質問をしましたが、残念ながら回答がありませんでした。うまくいけば、ここでより良い運が得られるでしょう。

形式をテキストで指定しようとしています (たとえば、コンパイルされた式を使用する代わりに、keywords::format = "blahblah")。

これは、再コンパイルする必要なく、コマンド ライン パラメーターまたは構成ファイルを使用して、フォーマットを簡単に再構成できるという考え方です。ただし、カスタムの severity_level 列挙を使用するときに %Severity% を指定すると、まったく出力されないようです。

boost_1_55_0/libs/log/example/keywords/main.cpp の例を見てください。

単純に 86 行目を次のように変更します。

logging::add_console_log(std::clog, keywords::format = "%Severity% %TimeStamp%: %_%");

解決しようとしていると思われる問題が表示されます。

私の疑いは、コアがカスタム Severity 属性を認識していないことです。これは、登録されておらず、%Severity% をどのフォーマッターにも解析できないためです。対照的に、以下の add_file_log は、コンパイルされた式を使用しているため、重大度レベルを正しく出力し、何を行う必要があるかを推測できます (その仮定で正しいでしょうか)?

独自の属性クラスを展開しないと、これを解決するために属性を追加できないようです。BOOST_LOG_ATTRIBUTE_KEYWORD で宣言された重大度に関連する属性またはフォーマッターを追加するにはどうすればよいですか? 次のように一致するように、123 行目の severity_logger のテンプレート パラメータを削除すると、次のようになることに注意してください。

src::severity_logger< > slg; 

次に、列挙型ではなく標準の int に発展し、出力は人間が読める文字列ではなく int として「正しく」表示されます。今のところはこれで問題ありませんが、もちろん、可能であれば人間が判読できるようにしたいと考えています。これは、boost_1_55_0/libs/log/example/settings_file/main.cpp の例のとおりです。

4

0 に答える 0