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();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

    在使用Unity中的Debug.Log()进行日志输出时很不方便,在打包出来的可执行文件中没有办法看到输出,所有就想自己实现一个简易的日志输出功能,可以输出到日志文件,因为能力实在是不够,所以有错误和不合理的地方,还请各位老师指点一下,谢谢啦 1.日志记录器接口 public interface ILogger { void Log(string condition, string stackTrace, UnityEngine.LogType type); } 2.日志文件记录器 using

  • Python常用模块logging——日志输出功能(示例代码)

    用途 logging模块是Python的内置模块,主要用于输出运行日志,可以灵活配置输出日志的各项信息. 基本使用方法 logging.basicConfig(level=logging.DEBUG, format='levelname:%(levelname)s filename: %(filename)s ' 'outputNumber: [%(lineno)d] thread: %(threadName)s output msg: %(message)s' ' - %(asctime)s'

  • C#实现程序单例日志输出功能

    对于一个完整的程序系统,一个日志记录是必不可少的.可以用它来记录程序在运行过程中的运行状态和报错信息.比如,那些不想通过弹框提示的错误,程序执行过程中捕获的异常等. 首先,在你的解决方案中,适当的目录中新建一个类,比如 LogManager: 编写如下代码: /// <summary> /// 日志管理 /// </summary> public class LogManager { private string _logDir; // 日志文件存放目录 private stati

  • 解决springmvc整合Mybatis的Log4j日志输出问题

    springmvc整合Mybatis的Log4j日志输出 当我们进行web开发的时候总是看到配置的log4j日志在控制台无法显示mybatis的主要是指sql.参数.结果,出现这种问题有两种情况: 第一种情况 下面文档描述的mybatis本身内置很多种日志框架使用,所以如果我们要用具体哪个日志框架,就需要进行相应mybatis配置,或者就是按照mybatis本身规则运行. 问题在这里文档:http://mybatis.github.io/mybatis-3/zh/logging.html 配置方

  • 详解Unity日志打印工具功能

    目录 一.日志工具功能 二.Logger类 三.LoggerMgr类 四.上传日志 五.日志双击溯源问题 一.日志工具功能 封装Debug类,需要实现功能: 1.控制所有日志是否打印: 2.除了Log,Warning,Error外,给更多日志种类(不同颜色): 3.格式化打印日志: 4.不定参数,自动拼接成字符串: 5.上传日志到服务器: 二.Logger类 1.控制日志打印 封装Debug中关于Log的方法: 使用静态方法,声明静态字段,控制log,warning,error是否打印: Deb

  • WPF+ASP.NET SignalR实现简易在线聊天功能的示例代码

    目录 涉及知识点 什么是ASP.NET SignalR 在线聊天整体架构 ASP.NET SignalR在线聊天服务端 1. 创建ASP.NET Web API项目 2. 创建消息通知中心Hub 3. 注册服务和路由 4. ASP.NET SignalR中心对象生存周期 SignalR客户端 1. 安装SignalR客户端依赖库 2. 客户端消息接收发送 运行示例 在实际业务中,当后台数据发生变化,客户端能够实时的收到通知,而不是由用户主动的进行页面刷新才能查看,这将是一个非常人性化的设计.有没

  • golang log4go的日志输出优化详解

    前言 在go语言中,自身已经集成了一定log模块,开发者可以使用go语言自身的log包(import "log") .也有不少对自身log的开源封装.对于一些简单的开发,自身的log模块就已经足够应付.但是对一些大型,复杂的开发,log需要分门别类的输出,或者通过网络进行输出,自身log模块将难以应对. 当前也有一些比较重量级的log模块,比如logrus,可以实现比较复杂的功能.这里介绍一个轻量级的log模块--log4go 最近又看了一些golang的日志包和相关的文章,仔细阅读了

  • Django实现web端tailf日志文件功能及实例详解

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇 <Django使用Channels实现WebSocket--上篇> 的学习应该对Channels的各种概念有了清晰的认知,可以顺利的将Channels框架集成到自己的Django项目中实现WebSocket了,本篇文章将以一个Channels+Celery实现web端tailf功能的例子更加深入的介绍Channels 先说下我们要实现的目标:所有

  • springboot使JUL实现日志管理功能

    第一步:设置logging.properties的内容(放在resource文件夹下面) #输出两种方式 handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler .level= FINE #对日志的输出进行设置(主要是file类) #java.util.logging.FileHandler.pattern = %h/java%u.log #下面的是输出到制定的目录下 java.util.logging.

  • logback过滤部分日志输出的操作

    目录 logback过滤部分日志输出 场景 日志过滤 Logback 自定义灵活的日志过滤规则 下面是一个只记录日志级别为ERROR的例子 下面举一个简单的例子 logback过滤部分日志输出 场景 使用监控异常日志进行告警时,部分异常日志可能只是不需要告警,但无法通过编码去除时,可以通过不输出这类异常日志达到忽略告警的目的. 比如在系统中经常会出现断开的管道的相关问题,异常如下 org.apache.catalina.connector.ClientAbortException: java.i

随机推荐