Unity实现简易日志输出功能
作者:Blinkedu 发布时间:2023-07-25 22:59:44
标签: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;
/// <summary>
/// 构造方法
/// </summary>
/// <param name="isClear">是否清空原有的日志</param>
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() { }
/// <summary>
/// 初始化
/// </summary>
/// <param name="_logger">日志输出器</param>
/// <param name="isOpen">是否开启日志输出</param>
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;
}
/// <summary>
/// 过滤器
/// </summary>
/// <param name="logType">需要显示的日志类型</param>
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();
}
}
来源:https://blog.csdn.net/qq_30473517/article/details/88815881


猜你喜欢
- response.setHeader设置下载文件名无效response.setContentType("application/o
- 目录前言一、如何实现?1、使用ObjectDataProvider2、定义转换器3、绑定容器二、使用示例1.代码2.显示效果前言wpf本身没
- 树概念及结构树是一种 非线性 的数据结构,它是由 n ( n>=0 )个有限结点组成一个具有层次关系的集合把它叫做树是因 为它看起来像
- 使用python和java实现数独游戏,有比较才有收获哦。1、Python版#--coding:utf-8--import ra
- 工作需求,要播放一张gif图片,又不想转成视频播放,就开始研究怎样解析gif,在网上也看了不少教程,最后根据自己需求写了个脚本。首先,Uni
- 原因如下: Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的
- 前言我们知道,IOC是Spring的核心。它来负责控制对象的生命周期和对象间的关系。举个例子,我们如何来找对象的呢?常见的情况是,在路上要到
- import java.util.LinkedList;public class OJ { public OJ() {
- 前言本文章主要讲解控制流程:块作用域、条件语句、switch语句,篇幅不大,通俗易记。块作用域在深入学习控制结构前,须先了解块的作用。定义:
- 概述@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。基本用法如下:1. 添加Maven
- 本文实例讲述了Android软键盘弹出时的界面控制方法。分享给大家供大家参考,具体如下:有时候androidactivity弹出软键盘后布局
- 最近在鼓捣spring -boot ,真好用,学习到jpa.通过生成Entity 文件,能够快速的生成数据库,并且使用JpaReposito
- 本文将介绍一种通过代码控制ListView上下滚动的方法。先上图:按下按钮会触发ListView滚动或停止。实现该功能并不难,下面给出主要代
- 抛砖今天使用monio做S3存储时,添加云服务器初始化时一直在构建客户端抛出异常。MinioClient.builder() //NoCla
- 本文实例讲述了C#画笔Pen绘制光滑模式曲线的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syste
- instanceof关键字的使用1. 语法格式x instanceof A:检验x是否为类A的对象,返回值为boolean类型,如果是,返回
- 本文实例讲述了java字符串相似度算法。分享给大家供大家参考。具体实现方法如下:public class Levenshtein {&nbs
- Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念
- 本文主要介绍了C# 泛型字典 Dictionary的使用详解,分享给大家,具体如下:泛型最常见的用途是泛型集合,命名空间System.Col
- 本文主要介绍了spring-boot-maven-plugin报红解决方案,亲测有效,具体如下:<?xml version="