티스토리 뷰

## 개요

각 플랫폼이나 프레임워크마다 서로 다른 로그 기준을 사용중이라 개발시 기준을 잡기위해 로그수준에 대해서는 어느정도 본인만의 기준을 잡을 필요성이 있다. RFC 5424를 기본으로 잡는다면 아래와 같이 대부분의 상황에 기준을 명확히 세우고 로그 작업을 진행할 수 있다.

- RFC 5424(syslog) : 시스템, 소프트웨어 등에서 발생하는 로그메시지 로깅을 위한 표준 프로토콜

 

아래는 개인적인 판단으로 적절하게 심각도 수준을 배치시켜 보았다.

중간에 비어있는 영역은 개별적인 판단으로 Warning 또는 Log에 편입시키면 된다.

주요 Logging 시스템 로그레벨 비교

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 또는 스크립트 상에서 세팅 가능하다.

Player Settings의 Logging시 Stack Trace 수준 설정

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

 

RFC 5424: The Syslog Protocol

 

www.rfc-editor.org

https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html

 

Level (Java Platform SE 7 )

FINE is a message level providing tracing information. All of FINE, FINER, and FINEST are intended for relatively detailed tracing. The exact meaning of the three levels will vary between subsystems, but in general, FINEST should be used for the most volum

docs.oracle.com

https://logging.apache.org/log4j/2.x/manual/customloglevels.html

 

Log4j – Custom Log Levels

Copyright © 1999-2023 The Apache Software Foundation. All Rights Reserved. Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.

logging.apache.org

https://source.android.com/docs/core/tests/debug/understanding-logging?hl=ko 

 

로깅 이해  |  Android 오픈소스 프로젝트  |  Android Open Source Project

로깅 이해 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 문서에서는 로그 표준, 수준 가이드라인, 클래스, 목적, 다중 스택 근사를 포함하여 로깅 프로

source.android.com

https://developer.apple.com/documentation/os/logging

 

Logging | Apple Developer Documentation

Capture telemetry from your app for debugging and performance analysis using the unified logging system.

developer.apple.com

https://docs.unity3d.com/kr/530/ScriptReference/LogType.html

 

LogType - Unity 스크립팅 API

The type of the log message in Debug.logger.Log or delegate registered with Application.RegisterLogCallback.

docs.unity3d.com

https://docs.unity3d.com/kr/530/ScriptReference/Debug.Log.html

 

Debug-Log - Unity 스크립팅 API

Logs message to the Unity Console.

docs.unity3d.com

https://docs.unity3d.com/kr/560/Manual/LogFiles.html

 

로그 파일 - Unity 매뉴얼

개발 시 사용자가 빌드한 웹 플레이어, 타겟 디바이스 또는 에디터의 로그에서 정보를 얻고 싶은 경우가 있을 수 있습니다. 일반적으로 문제가 발생하면 파일을 보고 어디에서 ​​문제가 발생

docs.unity3d.com

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함