로깅
어느 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가 실패해 스스로를 멈췄을 때 무엇을 볼 수 있는지.