ログ
どの behaviour の、どのメソッドの、何行目から出たログなのかを自分で言うログ。アップロードした後も動きます。
Udon にはコールスタックがありません。文字列を渡された側のメソッドは、自分を呼んだのが誰なのかを知る手立てを持っていません。そしてワールドのログは、すべての behaviour の出力が混ざった一本の流れです。Debug.Log("done") は、どのファイルから出たのか誰にも辿れない一行になります。
Udonite Logging は、その答えを呼び出し側に貼り付けます。
using Udonite.Logging;
public class Scoreboard : UdoniteBehaviour
{
public override void Start()
{
Log.Info("ready");
}
public void Award(int points)
{
Log.Assert(points > 0);
Log.Info("awarding " + points, "scoring");
}
}
[Scoreboard.Start:7] ready
[assertion failed] [Scoreboard.Award:14] points > 0
[scoring] [Scoreboard.Award:16] awarding -3
これはタダです。 [CallerFilePath]、[CallerMemberName]、[CallerLineNumber] は C# コンパイラが束縛の途中で埋めてしまうので、ワールドが動く頃にはプログラムに書き込まれた定数になっています。探索もリフレクションも、毎フレームの処理もありません。
入っているもの
| 呼び出し | 書くもの |
|---|---|
Log.Info(message) |
ふつうの一行 |
Log.Warning(message) |
警告 |
Log.Error(message) |
エラー |
Log.Assert(condition) |
偽のときだけ、条件をそのまま引用したエラー |
Log.Entry(message) |
書かずに LogEntry オブジェクトを返す |
Log.Site() |
[Type.Member:line] の部分だけ |
どれもタグを省略可能な引数に取ります。自前で接頭辞を考えなくても、関係する行をまとめられます。
アップロードした後も Console は使えます
ワールドが Editor を離れた瞬間、Unity の Console は何も見えなくなります。その後に残るのは、クライアントが自分のことを喋り続ける数千行のログファイルだけです。
Udonite → Open Window → Settings → Logging はそのファイルを読んで、あなたの行を Console に戻します。Play モードで読んでいたのと同じ姿のまま戻るので、実際にプレイヤーが入っているワールドでも同じ窓が使えます。
次に読むもの
はじめに はログ API のすべてと、一行の各部分が何を意味するか。
ワールドのログ は Editor 側の話です。動いているワールドを Console から眺めること、そして behaviour が落ちて自分を止めてしまったときにどうするか。