반응형
Console에 출력되는 로그만으로는 디버깅을 하기 쉽지 않은 경우가 있다.
출력되는 로그를 저장해서 파일로 저장하면 디버깅이 용이할 수 있다.
여기에서는 System.IO의 StreamWriter를 사용한다.
StreamWriter를 선언하고 경로를 포함한 파일을 new와 함께 생성한다.
StreamWriter writer;
void Awake()
{
writer = new StreamWriter("Assets/Log/mylog.txt");
}
그리고 출력하고 싶은 로그에 WriteLine을 이용하여 저장하면 끝이다.
writer.WriteLine("출력하고 싶은 로그");
WriteLine으로 로그를 저장하더라도, 정상적으로 Fulsh와 Close를 해야 최종적으로 txt 파일이 생성된다.
따라서 OnDisable에 Flush와 Close를 추가한다.
void OnDisable()
{
writer.Flush();
writer.Close();
}
하지만 매번 로그에 WriteLine을 추가하는 것은 번거롭다.
모든 로그를 수집하고 싶다면, logMessageReceived에 콜백 함수를 추가하면 된다.
로그를 추가하는 김에 현재 시간도 알 수 있도록 DateTime을 이용해 현재 시간을 같이 찍는다.
void saveLog(string logString, string stackTrace, LogType type)
{
string currentTime = DateTime.Now.ToString(("HH:mm:ss"));
writer.WriteLine($"[{currentTime}] {logString}");
}
void Awake()
{
writer = new StreamWriter("Assets/Log/mylog.txt");
Application.logMessageReceived += saveLog;
}
문자열 보간을 이용하여 "[현재 시간] 로그 내용" 형식으로 출력하도록 하였다.
마지막으로 OnDisable에서는 콜백 함수를 제거한다.
void OnDisable()
{
Application.logMessageReceived -= saveLog;
writer.Flush();
writer.Close();
}
이제 적절히 로그를 추가하고 아무 오브젝트에 LogCreator.cs를 추가하고 게임을 실행하자.
지정한 경로에 로그가 생성되는 것을 확인할 수 있다.
파일을 열어보면 현재 시간과 함께 로그가 정상적으로 저장된 것을 알 수 있다.
전체 코드는 다음과 같다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO; /* StreamWriter */
using System; /* DateTime */
public class LogCreator : MonoBehaviour
{
StreamWriter writer;
void saveLog(string logString, string stackTrace, LogType type)
{
string currentTime = DateTime.Now.ToString(("HH:mm:ss"));
writer.WriteLine($"[{currentTime}] {logString}");
}
void Awake()
{
writer = new StreamWriter("Assets/Log/mylog.txt");
Application.logMessageReceived += saveLog;
Debug.Log("Awake!!");
}
void Start()
{
Debug.Log("Start!!");
}
void Update()
{
Debug.Log("Update!!");
}
void OnDisable()
{
Debug.Log("OnDisable!!");
Application.logMessageReceived -= saveLog;
writer.Flush();
writer.Close();
}
}
Unity Plus:
Unity Pro:
Unity 프리미엄 학습:
반응형
'개발 > Unity' 카테고리의 다른 글
유니티 C# - 튜플로 여러 값 반환하기 (Returning Multiple Values Using Tuple) (0) | 2022.10.07 |
---|---|
유니티 - yield return null vs WaitForEndOfFrame 비교하기 (0) | 2022.10.03 |
유니티 시네머신 - FreeLook + TargetGroup으로 전체 지도 촬영하기 (0) | 2022.10.02 |
유니티 시네머신 - 현재 활성화된 가상 카메라 가져오기 (How to Get Active Virtual Camera) (0) | 2022.10.02 |
(16) Mixing Camera로 화면 혼합하기 - 유니티 시네머신 튜토리얼 (0) | 2022.09.26 |
댓글