로깅

어느 behaviour의, 어느 메서드의, 몇 번째 줄에서 나온 로그인지 스스로 말하는 로그. 업로드한 뒤에도 그대로 동작합니다.

업데이트 2026-09-08

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

문제가 발생했습니다 새로 고침