ログシステム¶
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());