티스토리 뷰
[Unity] LogType & StackTraceLogType (& Log Level)
progrunman 2023. 3. 17. 13:41## 개요
각 플랫폼이나 프레임워크마다 서로 다른 로그 기준을 사용중이라 개발시 기준을 잡기위해 로그수준에 대해서는 어느정도 본인만의 기준을 잡을 필요성이 있다. RFC 5424를 기본으로 잡는다면 아래와 같이 대부분의 상황에 기준을 명확히 세우고 로그 작업을 진행할 수 있다.
- RFC 5424(syslog) : 시스템, 소프트웨어 등에서 발생하는 로그메시지 로깅을 위한 표준 프로토콜
아래는 개인적인 판단으로 적절하게 심각도 수준을 배치시켜 보았다.
중간에 비어있는 영역은 개별적인 판단으로 Warning 또는 Log에 편입시키면 된다.
Unity의 Exception의 경우 Error수준인데 순서가 마지막에 있는걸보면 LogType은 심각도 수준 순서가 아니란걸 알 수 있다.
## Unity의 로깅 시스템
일반적으로 Exception은 동작 중 발생하는 예상하지 못한 예외상황을 나타내며 로직에서 상황을 캐치하여 처리하기를 기대하는 반면에 Error는 잠재적으로 복구하거나 해결기 힘든 심각한 문제를 나타내는 경우가 많다.
Unity에서는 StackTrace정보를 통해 개발자가 버그를 수정하길 원해서인지 Exception이 가장 낮은수준(상세 메시지)에 위치하고, Error가 가장 높은수준에 위치한다. (Assert의 경우 Unity 내부 오류도 나타냄)
또한, 보통 Logger를 하위수준으로 세팅시 상위수준까지 커버하도록 하는데 Unity에서는 특이하게도 LogType 각각에 대해 3단계로 수준(Log level)을 별도로 설정하도록 되어있다. 닷넷 모노를 사용하는 엔진이라 관리 영역과 비관리 영역에 대한 세밀한 로깅 컨트롤을 위해서 제공하는듯하다.
- None : 스택추적 안함
- ScriptOnly : managed 영역만 스택추적 및 로깅
- Full : native 영역까지 스택추적 및 로깅
즉, 원하는 LogType에 대해서만 설정된 스택추적 수준으로 로깅하도록 되어있다.
설정은 Project Settings 또는 스크립트 상에서 세팅 가능하다.
PlayerSettings.SetStackTraceLogType(LogType logType, StackTraceLogType stackTraceType);
// or
Application.SetStackTraceLogType(LogType logType, StackTraceLogType stackTraceType);
PlayerSettings를 통해 설정시 UI를 통해 설정하는것과 동일하고, 암시적으로 `Application.SetStackTraceLogType`을 호출한다. 기본설정은 ScriptOnly이다. 게임 런칭시에는 성능향상을 위해 None을 기본으로 하고 필요한 부분만 적절한 세팅이 필요해 보인다.
## 결론
기본로거인 `Debug.Log` (내부적으로 default logger인 `Debug.unityLogger`를 사용)를 사용해도 되지만 다목적 엔진이라 로깅 범위가 넓다. 명확한 기준을 세우고 기본 로거를 커스터마이즈시 개발에 더 효율적일 것으로 생각된다.
- Unity에서 로깅과 관련된 API : Logger, ILogger, Debug.unityLogger, Application.RegisterLogCallback
- Editor로그와 Player로그 파일 저장 위치는 공식문서 참조
## References
https://www.rfc-editor.org/rfc/rfc5424#section-6.2.1
https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html
https://logging.apache.org/log4j/2.x/manual/customloglevels.html
https://source.android.com/docs/core/tests/debug/understanding-logging?hl=ko
https://developer.apple.com/documentation/os/logging
https://docs.unity3d.com/kr/530/ScriptReference/LogType.html
https://docs.unity3d.com/kr/530/ScriptReference/Debug.Log.html
'Programming > Languages' 카테고리의 다른 글
[C#] const & readonly (컴파일타임 상수 & 런타임 상수) (0) | 2023.03.16 |
---|---|
[C#] 현재 method 및 class 정보 얻기 (0) | 2023.03.01 |
[C#] 키워드들 interface, abstract, virtual, override, sealed 등등 (0) | 2023.02.28 |
- Total
- Today
- Yesterday
- coroutine
- firestore
- vscode
- 싱글톤
- git
- C#
- RuntimeInitializeOnLoadMethod
- unity
- Visual Studio Code
- gcp
- 환경설정
- Custom Package
- async
- 닷넷
- Debug
- .net
- 유니티
- Singleton
- Python
- selenium
- Scraping
- 코루틴
- initialize
- await
- VS2022
- logging
- framework
- Addressables
- 비동기
- github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |