Unity实现简易的日志输出功能

在使用Unity中的Debug.Log()进行日志输出时很不方便,在打包出来的可执行文件中没有办法看到输出,所有就想自己实现一个简易的日志输出功能,可以输出到日志文件,因为能力实在是不够,所以有错误和不合理的地方,还请各位老师指点一下,谢谢啦

1.日志记录器接口

public interface ILogger
{
    void Log(string condition, string stackTrace, UnityEngine.LogType type);
}

2.日志文件记录器

using System;
using UnityEngine;
using System.IO;

public class FileLogger : ILogger
{
    private readonly string path;

    /// 
    /// 构造方法
    /// 
    /// 是否清空原有的日志
    public FileLogger(bool isClear = false)
    {
        switch (Application.platform)
        {
            case RuntimePlatform.Android:
                path = Path.Combine( Application.persistentDataPath,"log.txt");
                break;
            case RuntimePlatform.WindowsPlayer:
                path = Path.Combine(Application.dataPath, "log.txt");
                break;
            case RuntimePlatform.WindowsEditor:
                path = Path.Combine(Application.dataPath, "log.txt");
                break;
            case RuntimePlatform.IPhonePlayer:
                path = Path.Combine(Application.persistentDataPath, "log.txt");
                break;
            case RuntimePlatform.OSXEditor:
                break;
            default:
                break;
        }

        if (isClear)
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
    }

    public void Log(string condition, string stackTrace, LogType type)
    {
        using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.UTF8))
        {
            string msg = string.Format("[{0}] {1}: {2}\n{3}", GetNowTime(), type, condition, stackTrace);
            sw.WriteLine(msg);
        }
    }


    #region Tool Method
    private string GetNowTime()
    {
        return DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
    }
    #endregion
}

3.日志系统管理类 

using System;
using UnityEngine;

public class LogSys
{
    private static ILogger logger;
    public static ILogger Logger
    {
        get { return logger; }
    }

    public bool IsOpen
    {
        get { return Debug.unityLogger.logEnabled; }
    }

    private LogSys() { }

    /// 
    /// 初始化
    /// 
    /// 日志输出器
    /// 是否开启日志输出
    public static void  Init(ILogger _logger, bool isOpen = true)
    {
        Init(isOpen);
        logger = _logger;
        Enable();
    }

    public static void Init(bool isOpen = true)
    {
        Debug.unityLogger.logEnabled = isOpen;
    }

    /// 
    /// 过滤器
    /// 
    /// 需要显示的日志类型
    public static void Filter(LogType logType = LogType.Log)
    {
        Debug.unityLogger.filterLogType = logType;
    }
    
    public static void Enable()
    {
        if (logger != null)
        {
            Application.logMessageReceived += logger.Log;
        }
    }
    
    public static void Disable()
    {
        if (logger != null)
        {
            Application.logMessageReceived -= logger.Log;
        }

    }
}

4.测试 

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public Text logText;

    void Awake()
    {
        LogSys.Init(new FileLogger());
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            Debug.Log("My name is Blinkedu.");
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
            Debug.LogWarning("My name is Blinkedu.");
        }

        if (Input.GetKeyDown(KeyCode.E))
        {
            Debug.LogError("My name is Blinkedu.");
        }
    }

    private void OnDestroy()
    {
        LogSys.Disable();
    }
}

 

Unity实现简易的日志输出功能_第1张图片 

你可能感兴趣的:(Unity,个人学习)