ログシステム

Strixには独自のログシステムが組み込まれています。Strixの各クラスはこれを用いてSDKの内部で起きたことを記録します。Strixのログシステムを用いて自分のスクリプトで発生した事象を記録することもできます。

このログシステムは、LogManagerシングルトンが制御します。

注釈

Strixのログ関連のクラスや値型はSoftGear.Strix.Net.Logging名前空間に含まれています。Strixのログシステムを利用する場合、スクリプトに次のようなusingディレクティブを追加する必要があるでしょう。

using SoftGear.Strix.Unity.Runtime;

ログレベル

開発中やデバッグ中に、デバッグメッセージのログレベルを上げると便利な場合があります。これを行うには、LogManager.Instance.Filterの値を変更します。これはLevelという列挙型で、利用できる選択肢は次の通りです(重要でないものから重要なものの順に並んでいます)。

名前

記録する事象

TRACE

機能の具体的で詳細な内部処理

DEBUG

エラーのデバッグに役立つ情報

INFO

通常のアプリケーション動作に関する情報

WARNING

予期しない動作

ERROR

致命的でないエラー

FATAL

致命的なエラー

注釈

他のログシステムと同様に、Filterを特定のログレベルに設定すると、そのレベルよりも重要な事象も全て記録されます。

自分のスクリプトのログ

SDKからのメッセージをフィルターするのみではなく、Loggerクラスを使用して独自のメッセージを出力することもできます。それらのメッセージも同様にフィルターされます。Loggerには、ログの性質に基づいたカテゴリーによっていくつかのインスタンスが存在します。独自のメッセージを記録するためには、まず適切なロガーを取得する必要があります。個々のロガーは名前で識別され、次に示すLogManagerのメソッドを用いて取得できます。

bool FindLogger(string name, out Logger logger)

次のようにGetLoggers()を呼び出すと利用できるロガーが分かります。

var availableLoggerNames = LogManager.Instance.GetLoggers().Keys;

スクリプトに有用なロガーは、おそらく "StrixBehaviour" と "StrixReplicator" でしょう。

ロガーの参照を受け取ったら、それを使用してログにメッセージを出力できます。

// 文字列の場合
logger.Warning("Something bad happened.");

// デリゲートの場合
public string MyLoggingFunc()
{
    return "Something bad happened.";
}
logger.Warning(MyLoggingFunc);

LoggerにはWarningの他にもログレベルと対応した名前のメソッドがあります。

レベルを引数で指定するLogメソッドを使用することもできます。

logger.Log(Level.WARNING, "Something bad happened");
logger.Log(Level.WARNING, MyLoggingFunc);

ログレベルの確認

Loggerにはもう一つ便利なメソッドがあり、特定のログレベルが現在有効になっているかどうかを確認することができます。

bool IsLogEnabled(Level logLevel)
if (logger.IsLogEnabled(Level.DEBUG))
    foreach (var node in searchResult.Result.GetModelCollection())
        logger.Debug("Node " + node.GetUid() + " " + node.GetHost() + ":" + node.GetPort() + " " + node.GetProtocol() + " " + node.GetNodeType());