0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Strix Cloudのログレベルが適切に設定出来ない時

Posted at

Strix Cloudって何?という方は、前にStrix Cloudについての記事を投稿したのでそちらを御覧ください。

記事で使用しているバージョン

  • Unity 2020.3.5f1
  • StrixUnitySDK 1.5.0

Strix Cloudのログシステムについて

Strix Cloudにはログシステムという便利なログ機能があります。

ログシステムは個別の機能ごとにロガーを作成することが出来ます。
即ち、一部のStrixの機能のロガーのみを有効化し、ログの可読性を向上させるといったことが可能です。

また、ロガーにはログレベル(Filter) が設けられていて、警告レベル以上のログのみ表示することもできます。
しかし、このログレベルの設定が厄介だったので、ここでしっかりまとめておきます。

ログレベルが適切に設定出来なかった

以下のコードでログレベルを警告レベルに引き上げようとします。
LogManager.Instance.Filter = Level.WARNING;
ですが、設定後のログでも、それ以下のINFOレベルのログが表示されてしまいました。

ログシステムの内部実装を追ってみます。

LogManagerとLogger

それぞれのLoggerはLogManagerクラスによって管理されています。

  • LogManager
    • Logger: StrixReplicator
    • Logger: StrixBehaviour
    • Logger: AbstractNetworkStrategy
    • etc..

そして、それぞれのロガーにもログレベルが設定されています。
ロガーごとのログレベルは、ロガーを作成した時点でのLogManager.Filterが適用されます

従って、今回の問題は以下の流れで発生していたようです。

  1. LogManager.FilterLevel.INFOが設定される。(初期値はINFO)
  2. StrixCloudの機能のロガーが作成される。
  3. ロガーのログレベルにLevel.INFOが適用される。
  4. LogManager.FilterLevel.WARNINGを設定し、ログレベルを引き上げる。
  5. ログを出力するが、作成時にLevel.INFOが設定されていたため、それを優先して出力する。

解決策

StrixCloudの機能を用いる前に初期化するべきでした。
機能を用いた時点でロガーが生成されてしまうため、起動時にAwake()などの初期化関数でログレベルを設定すれば、正常に動作します。

任意のタイミングで設定したい場合は、ロガー全てのログレベルを書き換えるのも手です

public void SetLoggersLevel(Level logLevel)
{
    foreach (Logger logger in LogManager.Instance.GetLoggers().Values)
    {
        logger.Filter = logLevel;
    }
}

これでも思い通りにならない場合は

5.ログを出力するが、作成時にLevel.INFOが設定されていたため、それを優先して出力する。

優先して出力すると書いたのは、ロガーのログレベルよりLogManagerのログレベルが優先される場合があるからです。
Loggerクラスに書かれているログの出力条件は以下です。

logLevel >= this.Filter || logLevel >= LogManager.Instance.Filter

Loggerのログレベル以上または、LogManagerのログレベル以上のときに出力されるようです。
常にログレベルが低い方が優先されるので、
Logger.Filter == Level.WARNING && LogManager.Filter == Level.INFOの時はLogManager.Filterが優先され
Logger.Filter == Level.INFO && LogManager.Filter == Level.WARNINGの時はLogger.Filterが優先されるということですね。

ドキュメントには詳細に書かれていないので、初見だと詰まりそう...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?