当前位置: 首页 > news >正文

Unity的日志管理类

脚本功能:
1,打印日志到控制台
2,显示日志到UI Text
3,将日志写入本地文件
这对unity开发安卓平台来说很有用

using System;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.UI;public class FileLogger : MonoBehaviour
{public static FileLogger Instance;public Text LogText;private string logFilePath;private StringBuilder _logBuilder = new StringBuilder();private int _lineCount = 0;private const int MaxLines = 25;void Awake(){if (Instance == null){Instance = this;}}void Start(){// 注册日志回调Application.logMessageReceived += HandleLog;// 确定日志文件路径logFilePath = "sdcard/game_log.txt";// 检查是否需要删除旧日志(第二天才删除)CheckAndDeleteOldLog();}void OnDestroy(){// 取消注册Application.logMessageReceived -= HandleLog;}void CheckAndDeleteOldLog(){if (File.Exists(logFilePath)){DateTime lastWriteTime = File.GetLastWriteTime(logFilePath);DateTime today = DateTime.Now.Date;// 如果日志文件不是今天创建的,则删除if (lastWriteTime.Date < today){File.Delete(logFilePath);Debug.Log($"删除旧的日志文件:{lastWriteTime.ToShortDateString()}");}}File.AppendAllText(logFilePath, "日志记录器初始化\n");}void HandleLog(string logString, string stackTrace, LogType type){// 构造日志条目string logEntry = $"[{DateTime.Now}] [{type}] {logString}\n";if (type == LogType.Error || type == LogType.Exception){logEntry += $"{stackTrace}\n";}// 写入文件try{File.AppendAllText(logFilePath, logEntry);}catch (Exception e){Debug.LogError($"无法将日志写入文件: {e.Message}");}}public void MyLog(object str, int level = 0){if (LogText == null)return;// 添加新行_logBuilder.Insert(0, $"{str}\n");_lineCount++;// 如果超过最大行数,移除最旧的行if (_lineCount > MaxLines){int lastNewLineIndex = _logBuilder.ToString().LastIndexOf('\n', _logBuilder.Length - 1);if (lastNewLineIndex != -1){_logBuilder.Length = lastNewLineIndex;_lineCount--;}}LogText.text = _logBuilder.ToString();// 输出到 Unity 控制台switch (level){case 0: Debug.Log(str); break;case 1: Debug.LogError(str); break;}}
}

相关文章:

  • 【CF】Day78——⭐Codeforces Round 876 (Div. 2) D (LIS | 思维 | DP)
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • go工具库:hertz api框架 hertz client的使用
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 使用python实现奔跑的线条效果
  • TTL简述
  • 基于算法竞赛的c++编程(20)函数的递归
  • OpenLayers:封装Tooltip
  • stm32—ADC和DAC
  • Linux操作系统故障应急场景及对应排查方法
  • 湖北理元理律师事务所:债务优化中的民生保障实践
  • FreeRTOS任务之深入篇
  • 关键字--sizeof
  • Python抽象基类实战:构建广告轮播框架ADAM的核心逻辑
  • robot_lab train的整体逻辑
  • SDC命令详解:使用set_propagated_clock命令进行约束
  • 如何思考?分析篇
  • 深入剖析MySQL锁机制,多事务并发场景锁竞争
  • 34 C 语言字符串转数值函数详解:strtol、strtoll、strtoul、strtoull(含 errno 处理、ERANGE 错误)
  • 硬盘寻址全解析:从 CHS 三维迷宫到 LBA 线性王国
  • 青岛网站推广引流/网络推广运营是做什么
  • 北京顺义去哪找做网站的/重庆网站制作公司哪家好
  • 做网站方案怎么写/短视频推广渠道
  • 公司禁用网站怎么做/知名网站
  • 怎样做类似于优酷的视频网站/宁波网络推广优化公司
  • 龙岗住房建设局网站/百度一下百度首页登录