본문 바로가기
개발/Unity

유니티 - StreamWriter로 로그를 텍스트 파일로 출력하기 (Output Log with StreamWriter)

by 피로물든딸기 2022. 10. 2.
반응형

Unity 전체 링크

 

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:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글