클라이언트 프로그래머의 일기/N년차 클라이언트 프로그래머의 일기

Unity Debug Log의 단점 보완하기

ckhyeok 2021. 12. 3. 15:52

유니티의 Debug는 UnityEngine에서 제공하는 매우 유용한 클래스로 하루에 몇 번씩 사용하는 함수입니다.
Log와 DrawRay 등 다양한 방법으로 자신이 원하는 위치에 쉽게 Debug를 할 수 있는데요

저는 Debug.Log와 같은 함수들이 APK로 빌드 시 유니티 Build Settings에서 Development Build를 활성화해야만 해당 로그가 출력되는 줄 알았습니다.

하지만 Release로 빌드 시에도 해당 로그들은 출력됐으며, 이 로그들을 개발자가 아닌 앱 사용자라면 누구나 확인할 수 있으며 동시에 불필요한 성능을 잡아먹고 있었습니다.

이 문제를 보다 효율적으로 해결하기 위해 저는 2가지 방법을 채택했습니다.

1. 정규식을 사용해 지워도 되는 로그들과 그렇지 않은 로그들을 분류해서 한 번에 정리한다.

2. 1번에서 살아남은 필요한 로그들을 static 형식의 새로운 Debug Class와 Unity의 Define Symbols를 이용해 개발자가 해당 기능을 활성화 혹은 비활성화한다.

첫 번째 적용사항입니다.
현재 작업 중인 프로젝트에 심어둔 로그가 워낙 많아서 일일이 찾아서 지우기엔 시간이 너무 많이 걸릴 거 같아서 작업자별로 각자 정말 필요한 로그들을 주석처리 해달라 한 뒤 주석처리 한 로그를 제외한 모든 로그를 찾아서 지우는 정규식을 적용했습니다.

사용한 정규식은 다음과 같습니다.
^((?!//).)*debug.*;\r?\n

그 후 주석처리 한 로그들의 주석을 지워주는 정규식을 사용해 로그들을 일차적으로 분류했습니다.

두 번째 적용사항입니다.
public static class Debug 클래스를 만든 뒤 Conditional을 사용해 우리가 사용할 Define Symbols 값을 넣어서 각 함수를 세팅했습니다.

예시
[Conditional("DEBUG_LOG")]
public static void Log(object msg)
{
UnityEngine.Debug.Log (msg);
}

그 후 UnityEditor의 EditorWindow에서 Toggle을 사용해 해당 Define Symbols 값을 활성화, 비활성화할 수 있게 적용했습니다.