Suche senden
Hochladen
Boost.Logとfluentdで始めるログ活用術
•
6 gefällt mir
•
2,925 views
T
Toshiki Teramura
Folgen
Boost.Logとfluentdで始めるログ活用術
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 32
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
SIGMOD 2019 参加報告
SIGMOD 2019 参加報告
Masafumi Oyamada
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
Empfohlen
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
SIGMOD 2019 参加報告
SIGMOD 2019 参加報告
Masafumi Oyamada
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜
Yuya Unno
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
ナレッジグラフとオントロジー
ナレッジグラフとオントロジー
University of Tsukuba
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Product ManagerとProduct Ownerの役割の違いについて
Product ManagerとProduct Ownerの役割の違いについて
Noritaka Shinohara
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Takeshi Mikami
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
Deep Learning JP
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Haxeについて
Haxeについて
Moriyoshi Koizumi
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
YoheiGibo
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Akira Takahashi
Boost study#4
Boost study#4
Yuki Tamura
Weitere ähnliche Inhalte
Was ist angesagt?
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜
Yuya Unno
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
ナレッジグラフとオントロジー
ナレッジグラフとオントロジー
University of Tsukuba
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Product ManagerとProduct Ownerの役割の違いについて
Product ManagerとProduct Ownerの役割の違いについて
Noritaka Shinohara
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Takeshi Mikami
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
Deep Learning JP
トランザクションの設計と進化
トランザクションの設計と進化
Kumazaki Hiroki
Haxeについて
Haxeについて
Moriyoshi Koizumi
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
YoheiGibo
Was ist angesagt?
(20)
できる!並列・並行プログラミング
できる!並列・並行プログラミング
C#とILとネイティブと
C#とILとネイティブと
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
オブジェクト指向できていますか?
オブジェクト指向できていますか?
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
情報抽出入門 〜非構造化データを構造化させる技術〜
情報抽出入門 〜非構造化データを構造化させる技術〜
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
TLS, HTTP/2演習
TLS, HTTP/2演習
ナレッジグラフとオントロジー
ナレッジグラフとオントロジー
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Product ManagerとProduct Ownerの役割の違いについて
Product ManagerとProduct Ownerの役割の違いについて
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
【DL輪読会】AUTOGT: AUTOMATED GRAPH TRANSFORMER ARCHITECTURE SEARCH
トランザクションの設計と進化
トランザクションの設計と進化
Haxeについて
Haxeについて
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
Andere mochten auch
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Akira Takahashi
Boost study#4
Boost study#4
Yuki Tamura
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Takatoshi Kondo
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
hiyohiyo
C++11やemscriptenと付き合って1年間の振り返り
C++11やemscriptenと付き合って1年間の振り返り
paosidufgythrj
Boost Tour 1.53.0
Boost Tour 1.53.0
Akira Takahashi
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Boost sg msgpack
Boost sg msgpack
Takatoshi Kondo
Andere mochten auch
(8)
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Boost study#4
Boost study#4
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
C++11やemscriptenと付き合って1年間の振り返り
C++11やemscriptenと付き合って1年間の振り返り
Boost Tour 1.53.0
Boost Tour 1.53.0
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
Boost sg msgpack
Boost sg msgpack
Ähnlich wie Boost.Logとfluentdで始めるログ活用術
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
Tetsuya Morimoto
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Fujio Kojima
Git入門-概念編
Git入門-概念編
Shin Tanigawa
vscode pipenv docker
vscode pipenv docker
ikdysfm
Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02
Kosuke Tanabe
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
CODE BLUE
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
Akihiko Shirai
俺とGitHub
俺とGitHub
Masayuki KaToH
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
Hiro Yoshioka
[Cloud OnAir] Google Cloud Next '18 最新情報 2018年7月26日 放送
[Cloud OnAir] Google Cloud Next '18 最新情報 2018年7月26日 放送
Google Cloud Platform - Japan
SnapDishの事例
SnapDishの事例
Fumikazu Kiyota
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Takayuki Shimizukawa
Git 初心者講座 by forkwell
Git 初心者講座 by forkwell
sinsoku listy
osakapy 2014.05 LT
osakapy 2014.05 LT
Hattori Hideo
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
No Bu
Github入門2014
Github入門2014
Akihiko Shirai
DockerでJupyter使おうぜ
DockerでJupyter使おうぜ
Satoshi Yazawa
Web IDE Gitpodを使ってTOPPES OSを体験してみよう
Web IDE Gitpodを使ってTOPPES OSを体験してみよう
Center for Embedded Computing Systems, Nagoya Univ.
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
Seiya Mizuno
Ähnlich wie Boost.Logとfluentdで始めるログ活用術
(20)
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Git入門-概念編
Git入門-概念編
vscode pipenv docker
vscode pipenv docker
Next-L Enju 開発ワークショップ #02
Next-L Enju 開発ワークショップ #02
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
俺とGitHub
俺とGitHub
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
[Cloud OnAir] Google Cloud Next '18 最新情報 2018年7月26日 放送
[Cloud OnAir] Google Cloud Next '18 最新情報 2018年7月26日 放送
SnapDishの事例
SnapDishの事例
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組み
Git 初心者講座 by forkwell
Git 初心者講座 by forkwell
osakapy 2014.05 LT
osakapy 2014.05 LT
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Github入門2014
Github入門2014
DockerでJupyter使おうぜ
DockerでJupyter使おうぜ
Web IDE Gitpodを使ってTOPPES OSを体験してみよう
Web IDE Gitpodを使ってTOPPES OSを体験してみよう
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
Kürzlich hochgeladen
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Kürzlich hochgeladen
(9)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Boost.Logとfluentdで始めるログ活用術
1.
BOOST.LOGとFLUENTDで始めるログ活用術 Boost.勉強会#17@東京 Created by @termoshtt
2.
自己紹介 大学院生(D3) 専攻= 流体数理(物理+ 応用数学) シミュレーション=
C++ データ解析= Python
3.
CONTENTS fluentd : ログ収集のための共通基盤 Boost.Logの構成と使い方
4.
WHY DO WE
NEED LOG?
5.
一人で使う 時間のかかる処理の進捗 デバッグ
6.
人の書いたコードを使う FOR LIBRARIAN 問題が発生した事をユーザーに伝える 問題を解決するための情報を集める FOR USER 発生した状況の情報を得る 開発者に問題を解決してもらうために情報を提供する
7.
つまり人が目視で確認する
8.
9.
FLUENTD ログを集約するための共通フォーマット リアルタイムにログを転送
10.
FLUENTD 様々なログを収集するためのプラグイン apache syslog ... 様々なストレージに保存するためのプラグイン elasticsearch ...
11.
FLUENTD 標準出力としてのfluentd UNIX的に解析ツールを組み合わせる事が可能
12.
BOOST.LOGの使い方
13.
BOOST.LOG フル機能のロギングライブラリ custom logger log filtering custom
sink
14.
15.
16.
ログの収集 名前空間/クラスにロガーを追加 namespace mod { namespace
logging = boost::log; namespace log { namespace attrs = logging::attributes; namespace src = logging::sources; } using severity_level = logging::trivial::severity_level; BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT( logger, src::severity_logger_mt<severity_level>); void init(); } // namespace mod
17.
ログの収集 ロガー毎に属性を付与 namespace mod { void
init() { auto &lg = logger::get(); lg.add_attribute("Tag", log::attrs::make_constant("mod")); // lg.add_attribute("Tag", attrs::constant<std::string>("mod1")); lg.add_attribute("Scope", log::attrs::named_scope()); } } // namespace mod
18.
ログの収集 属性のキーワードを登録 キーワードを用いて出力・フィルターを制御する BOOST_LOG_ATTRIBUTE_KEYWORD(line_id, "LineID", unsigned
int) BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level) BOOST_LOG_ATTRIBUTE_KEYWORD(tag_attr, "Tag", std::string) BOOST_LOG_ATTRIBUTE_KEYWORD(scope, "Scope", log::attrs::named_scope::value
19.
ログの収集 出力時に情報を追加 namespace mod { void
func() { BOOST_LOG_FUNCTION() // Scopeの値を設定(mod->func) auto &lg = logger::get(); if (flag) { BOOST_LOG_NAMED_SCOPE("true case"); // Scopeに入った事を記録する BOOST_LOG_SEV(lg, severity_level::info) << "flag is true"; } else { BOOST_LOG_NAMED_SCOPE("false case"); // Scopeに入った事を記録する BOOST_LOG_SEV(lg, severity_level::info) << "flag is false"; } BOOST_LOG_SEV(lg, severity_level::error) << "Some error occurs!!" } } // namespace mod
20.
ログのフィルタリング placeholderを使用する logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info
// lambda-exp. );
21.
ログのフィルタリング fluentd以降で解析する以上、C++側でフィルターする 意義はあまりない
22.
ログの出力 様々な出力形式に対応 /* 文字列フォーマット */ logging::add_file_log( keywords::file_name
= "client.log", keywords::format = "%Tag%: [%TimeStamp%] [%Scope%] %Message%" ); /* lambda-style */ logging::add_file_log( keywords::file_name = "stream_format.log", keywords::format = ( expr::stream << mod::tag_attr << mod::line_id << ": <" << mod::severity << "> [" << mod::scope << "] " << expr::smessage ) );
23.
ログの出力 int main() { init();
// いろいろ初期化 mod1::func1(true); mod1::func1(false); return 0; } mod: [2015-Mar-04 01:38:57.711251] [void mod::func(bool)->true case mod: [2015-Mar-04 01:38:57.711620] [void mod::func(bool)] Some error occur mod: [2015-Mar-04 01:38:57.711667] [void mod::func(bool)->false case mod: [2015-Mar-04 01:38:57.711698] [void mod::func(bool)] Some error occur
24.
ログの出力 どのようなフォーマットを使用するか? LTSV (Labeled Tab-Separated
Values) damp/parseが簡単 属性を追加するのが簡単 型は無く、全て文字列 解析側で型を戻す必要がある JSON formatが少し面倒
25.
ログの出力 typedef std::vector<std::pair<std::string, std::string>
> Attrs; void add_file_log(std::string filename, const Attrs &attr, bool auto_flush std::stringstream ss; for (auto &&pair : attr) { const std::string &key = pair.first; const std::string &val = pair.second; if (!ss.str().empty()) ss << "t"; ss << key << ":%" << val << "%"; } logging::add_file_log( keywords::file_name = filename, keywords::format = ss.str(), keywords::auto_flush = auto_flush ); }
26.
ログの出力 デバッグ時に属性を追加するのが簡単 BOOST_LOG_SEV(lg, KSE::info) << "update
infost" << "new_max_index:" << max_index << "t" << "step:" << (t / interval) << "t" << "count:" << count;
27.
COMPILE WITH CMAKE find_package(Boost
COMPONENTS thread system log log_setup REQUIRED) find_package(Threads) add_definitions("-DBOOST_LOG_DYN_LINK") macro(logged_executable name) add_executable(${name} ${name}.cpp) target_link_libraries( ${name} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${ARGN} ) endmacro(logged_executable)
28.
説明できなかった事 LTSVへの自動的なフォーマット channel fluentd側での解析例
29.
BOOST.LOGを使いたい理由 Boostに入ってる 高機能 実行時のオーバーヘッドが小さい(未確認)
30.
BOOST.LOGを使いたくない理由 placeholder難しい コンパイル遅い
31.
THE END - Source
codes (GitHub)
Jetzt herunterladen