서비스
교육 철학

Console Window (콘솔 창)

Abstract

📌
Console 탭은 게임 화면 안에서 보는 Unity 콘솔입니다. 에디터의 Console 창에 찍히는 것과 같은 로그가 여기에도 쌓입니다. 빌드를 폰에 올렸을 때 "지금 무슨 로그가 찍혔는지"를 케이블 없이 볼 수 있는 유일한 창구입니다.
실무에서 필요한 순간
•
폰 빌드에서만 나는 에러의 메시지와 스택을 보고 싶을 때
•
QA 가 버그를 재현했을 때 그 자리에서 로그 화면을 캡처해 받을 때
•
화면 왼쪽 위 FPS 아이콘이 빨간색으로 바뀌었을 때 — 에러 로그가 찍혔다는 신호다
로그는 이렇게 흘러 들어온다
graph LR
    A["Log.Info / Warning / Error<br>(프레임워크 로그 API)"] --> B["DefaultLogHelper"]
    B --> C["Debug.Log / LogWarning / LogError"]
    D["Debug.Log 직접 호출,<br>Unity 엔진 자체 로그"] --> C
    C --> E["Application.logMessageReceived"]
    E --> F["Console 탭"]
Mermaid
복사
프레임워크의 Log 클래스로 찍든 Debug.Log 로 찍든 결국 같은 곳으로 모입니다. 그래서 Console 탭에는 게임 코드의 로그와 Unity 엔진의 경고가 함께 보입니다.
코드에서
Console 탭의 분류
아이콘 색
Log.Debug / Log.Info
Info
흰색
Log.Warning
Warning
노란색
Log.Error
Error
빨간색
Log.Fatal, 처리되지 않은 예외
Fatal
자홍색
ToyboxNightmare 에서 확인하기
게임을 실행하고 Console 탭을 열면 ProcedureMain: Enter 가 찍혀 있습니다. 예제 코드는 정상 흐름에서 로그를 거의 남기지 않고, 무언가 잘못됐을 때만 Log.Warning / Log.Error 를 남기도록 짜여 있습니다. 예를 들어 Addressables 주소를 틀리게 적으면 OpenUIFormFailure 핸들러가 에러 로그를 남기고 아이콘이 빨갛게 변합니다. "화면에 아무 일도 안 일어난다"면 먼저 아이콘 색을 보세요.
버그 리포트에 로그 붙이기
private const int RecentLogCount = 50; List<DebuggerComponent.LogNode> logs = new List<DebuggerComponent.LogNode>(); GameEntry.GetComponent<DebuggerComponent>().GetRecentLogs(logs, RecentLogCount); StringBuilder sb = new StringBuilder(); for (int i = 0; i < logs.Count; i++) { sb.AppendFormat("[{0:HH:mm:ss}][{1}] {2}\n", logs[i].LogTime.ToLocalTime(), logs[i].LogType, logs[i].LogMessage); } // sb.ToString() 을 WebRequest 로 서버에 보내거나 파일로 저장한다
C#
복사
⚠️
자주 걸리는 곳
•
로그가 하나도 안 보이면 Scripting Define Symbols 를 확인하세요. Log 클래스의 메서드는 전부 [Conditional] 이라 ENABLE_LOG 계열 심볼이 없으면 호출 자체가 컴파일에서 사라집니다. 반대로 출시 빌드에서는 심볼을 빼는 것만으로 로그 비용이 0 이 됩니다. 수준별 심볼(ENABLE_WARNING_AND_ABOVE_LOG 등)로 "경고 이상만 남기기"도 가능합니다.
•
보관 개수는 기본 100줄입니다(Debugger 오브젝트의 Console Window → Max Line). 넘치면 오래된 것부터 버려집니다. 로그가 많은 게임이면 늘리세요.
•
디버거가 뜨기 전에 찍힌 로그는 잡히지 않습니다. 구독은 DebuggerComponent 가 초기화될 때 시작됩니다.
•
필터(Info / Warning / Error / Fatal 토글)와 스크롤 잠금 상태는 Setting 모듈에 저장되어 다음 실행에도 유지됩니다. "Info 가 안 보인다"면 지난번에 필터를 꺼 둔 것일 수 있습니다.
•
LogTime 은 UTC 입니다. 표시할 때 ToLocalTime() 을 거칩니다.

Console Window (콘솔 창)

관련 소스 파일
Scripts/Runtime/Debugger/DebuggerComponent.ConsoleWindow.cs
Scripts/Runtime/Debugger/DebuggerComponent.LogNode.cs
Scripts/Runtime/Debugger/DebuggerComponent.ScrollableDebuggerWindowBase.cs
콘솔 창은 Game Framework 내에서 런타임 중 Unity의 로그 메시지를 캡처하고, 표시하며, 관리하는 디버깅 유틸리티입니다. 개발자가 로그를 모니터링하고 필터링하며, 스택 추적을 검사하고 애플리케이션 동작을 분석할 수 있는 맞춤형 인터페이스를 제공합니다. 이 창은 다양한 런타임 디버깅 도구를 제공하는 Debugger 시스템의 일부입니다. 다른 디버깅 창에 대한 정보는 Debugger Component를 참고하세요.

개요 (Overview)

콘솔 창은 Unity의 모든 로그 메시지를 캡처하여 Info, Warning, Error, Fatal 네 가지 유형으로 분류합니다. 메시지는 스크롤 가능한 목록에 표시되며, 메시지 유형에 따라 색상으로 구분됩니다. 개발자는 메시지를 유형별로 필터링하고, 스크롤 위치를 고정하여 최신 로그를 확인할 수 있으며, 선택한 메시지의 상세 스택 추적을 볼 수 있습니다.

기능과 인터페이스 (Features and Interface)

콘솔 창은 개발자가 로그를 관리하고 분석할 수 있도록 다음과 같은 기능을 제공합니다:
•
로그 표시: 타임스탬프, 프레임 수, 메시지 내용을 포함한 로그 메시지 표시
•
필터링: Info, Warning, Error, Fatal 로그를 각각 토글 버튼으로 필터링
•
스크롤 잠금: 최신 로그를 자동으로 표시하도록 스크롤 위치를 고정
•
모두 지우기: 모든 로그 메시지를 삭제하는 버튼 제공
•
스택 추적 뷰어: 선택한 로그 메시지에 대한 상세 스택 추적 표시
•
메시지 개수: 수신된 각 로그 유형별 개수 표시

내부 구조 (Internal Structure)

콘솔 창은 큐(Queue) 구조로 로그를 관리하며, 최대 용량은 설정 가능하게 되어 있습니다. 로그 메시지가 수신되면 이를 처리하여 LogNode 객체로 저장하고, 현재 필터 조건을 통과한 경우 UI에 표시합니다.

LogNode

LogNode 클래스는 단일 로그 항목에 대한 모든 정보를 포함합니다:
•
LogTime (DateTime): 로그가 발생한 UTC 타임스탬프
•
LogFrameCount (int): 로그가 발생한 Unity 프레임 수
•
LogType (LogType): 로그 유형 (Log, Warning, Error, Exception)
•
LogMessage (string): 로그 메시지 내용
•
StackTrack (string): 상세 스택 추적 정보 (프로퍼티 이름이 StackTrace 가 아니라 StackTrack 이다. 원작의 철자가 그대로 남아 있다)

메시지 흐름 (Message Flow)

로그는 ConsoleWindow에 의해 수신되고, LogNode로 변환되어 큐에 저장된 뒤 UI에 출력됩니다.

설정 옵션 (Configuration Options)

콘솔 창은 다음과 같은 설정 가능한 속성을 제공합니다:
•
LockScroll (bool, 기본값: true): 자동으로 최신 로그로 스크롤
•
MaxLine (int, 기본값: 100): 저장할 최대 로그 개수
•
InfoFilter (bool, 기본값: true): Info 로그 표시 여부
•
WarningFilter (bool, 기본값: true): Warning 로그 표시 여부
•
ErrorFilter (bool, 기본값: true): Error 로그 표시 여부
•
FatalFilter (bool, 기본값: true): Fatal 로그 표시 여부
•
InfoColor (Color32, 기본값: White): Info 로그 색상
•
WarningColor (Color32, 기본값: Yellow): Warning 로그 색상
•
ErrorColor (Color32, 기본값: Red): Error 로그 색상
•
FatalColor (Color32, 기본값: Dark Red): Fatal 로그 색상
이 설정은 SettingComponent를 통해 세션 간에도 유지됩니다.

사용 방법 (Usage)

콘솔 창은 DebuggerComponent의 일부로 기본 포함되어 있습니다. 디버거가 활성화되어 있고 표시 중이라면, 메인 디버거 인터페이스에서 콘솔 창에 접근할 수 있습니다.

코드로 로그 정보 가져오기 (Retrieving Log Information Programmatically)

콘솔 창은 코드에서 로그 정보를 가져올 수 있는 메서드를 제공합니다:
•
GetRecentLogs(List results): 모든 로그 노드 가져오기
•
GetRecentLogs(List results, int count): 지정된 개수만큼 최근 로그 가져오기
이 기능은 진단 정보 전송, 크래시 리포트 생성, 또는 커스텀 디버깅 기능 구현 시 유용합니다.

Reference Pool과의 통합 (Integration with Reference Pool)

콘솔 창은 Game Framework의 객체 풀링 시스템인 ReferencePool을 사용하여 LogNode 인스턴스를 효율적으로 관리합니다. 로그가 큐에서 제거될 때(수동 삭제 혹은 최대 개수 초과) LogNode는 가비지 컬렉션되지 않고 풀에 반환되어 재사용됩니다.