Diarkis Module のロギング・システム

概要

本ページでは Diarkis Module のロギング・システムについて説明します。

Diarkis Module では Diarkis ランタイム・ライブラリおよび Diarkis Module の動作状況をログに出力しています。出力されたログは標準出力やファイル出力など様々な方法で確認することができます。想定したように動作しない場合や Diarkis ランタイムの動作状況を確認したい場合はまず初めにログ・ファイルを内容を確認することをお勧めします。

ロギング・システムの設定

Diarkis Module のロギング・システムの設定は DiarkisInterfaceBase::DiarkisInit() に渡す引数でコントロールします。ログ・ディレクトリ名、出力方法、ログを出力するかどうか等を設定することができます。

Diarkis Module のログ出力方法

Diarkis Module では以下の出力方法をサポートしています。

enum
説明

DEBUG_OUT

デバッガーへログが出力可能であればデバッガーへ、出力できなければ標準出力にログを出力します

FILE_OUT

ファイルへログを出力します。GetLogDirectoryPath() で取得したパスに diarkis-log.log という名前で出力されます

FILE_OUT_SPECIFIC_PATH

指定したパスへログ・ファイルを出力します

CONSOLE_OUT

標準出力にログを出力します

DEBUG_AND_FILE_OUT

DEBUG_OUT と FILE_OUT を合わせた挙動になります

CUSTOM

ユーザーが定義したカスタム・ロガーへログを出力します

ログ出力レベル

Diarkis Module のロギング・システムではログに出力する内容の詳細度を調整するログ出力レベルを設定することができます。diarkis-module\Client\Private\logging\LoggerFactory.cpp で実装している LoggerFactory のコンストラクターにデフォルトのログ出力レベルが記載されているため、これを変更することで変えることができます。また、LoggerFactory::SetSeverity() を使用してアプリ実行中に動的に変更することも可能です。

ログの出力レベルには以下の設定があります。下の設定ほどログの詳細度がまします。また、詳細度が高いログレベルは下位のログ・レベルを常に内包します。 Verbose や Trace は Diarkis ランタイムの動作速度に影響したり、ログ・ファイルが巨大になる可能性がありますので使用する際はご注意ください。

enum
説明

None

ログを出力しません

Fatal

致命的なエラーのログを出力します

Error

一般的なエラーも含めてログを出力します

Warning

警告を含めたログを出力します

Info

付加情報を含めたログを出力します

Debug

デバッグ情報を含めたログを出力します

Verbose

詳細なデバッグ情報を含めたログを出力します

Trace

ランタイムの動作や送受信したペイロードなどを可能な限り詳細にログに出力します

カテゴリ毎に確認できるログの内容

クライアント・ライブラリのロギング・システムでは、カテゴリ毎にログ・レベルを変更できる仕組みが用意されております。デバック時に確認されたい内容に合わせて、必要なカテゴリのログ・レベルを変更してご確認ください。

代表的なカテゴリ
デバック時に確認できる内容

UDP

UDP サーバーとの Connect, Disconnect の確認。意図しない切断時。パケットロスが発生している時の ack, eack を確認したい時

RUDP

パケットロスが発生している時に、RUDP パケット、シーケンス番号の処理状況を確認したい時

Socket

意図せずに切断した際など、Socket 回りの処理を確認したい時

P2P

P2P 通信時に、ホールパンチやパケット通信周りで意図しない問題があり確認したい時

Runtime

アプリケーションを実装する際に、パケットの送受信やサーバーからの通知や応答が来ない時に確認したい時

Room など各モジュールのカテゴリ

各モジュールを実装される際に、パケットの送受信やサーバーからの通知や応答が来ない時に確認したい時

カスタム・ロガーの実装

カスタム・ロガーを使用すると、ロガーの動作をユーザーが自由にカスタマイズすることができます。 ILoggerBackend を継承して ILoggerBackend::Log() をオーバーライドすることにより Diarkis ランタイムおよび Diarkis Module のログ出力処理をハンドリングすることができます。 以下がサンプル実装です。

// アプリケーション・カスタムのログ出力サンプル実装
class AppCustomLoggerBackend : public ILoggerBackend
{
    public:
        AppCustomLoggerBackend() {}
        virtual ~AppCustomLoggerBackend() {}

        virtual Result Log(const Diarkis::StdString& message, bool includeNewLine) override
        {
            // ログ・テキストが message として渡されるため、アプリ固有のログ出力を行う
            // 排他制御は行われているため複数スレッドから呼び出しても問題ない
            DiarkisUtils::Print("%s", message.c_str());
            return Diarkis::Results::SUCCESS;
        }
};

...
// カスタム・ロガーを初期化時に指定する疑似コード
AppCustomLoggerBackend customLogger;

DiarkisInterface::DiarkisInit(uid, LogOutType::CUSTOM, bOutLog, &customLogger);

最終更新