当前位置: 首页 > 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;}}
}
http://www.xdnf.cn/news/923473.html

相关文章:

  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • 用电脑通过USB总线连接控制keysight示波器
  • csrf攻击学习
  • Java 8 Stream API 入门到实践详解
  • Robot Framework 一个通用的 自动化测试框架
  • 【DAY42】Grad-CAM与Hook函数
  • 大模型Agent智能体介绍和应用场景
  • SpiritTools:一款小而精的实用工具箱
  • nonlocal 与global关键字
  • BeckHoff--MES数据交互 MQ TRANCE API (MQ 追溯 API - 系统概述和命令参考)
  • YOLOv8 升级之路:主干网络嵌入 SCINet,优化黑暗环境目标检测
  • gawk 指令
  • NPOI Excel用OLE对象的形式插入文件附件以及插入图片
  • 元器件基础学习笔记——结型场效应晶体管 (JFET)
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • Golang——10、日志处理和正则处理
  • 自制操作系统(五、重写引导部分和C语言的使用)
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 【论文解读】DeepSeek-R1
  • 一款“短小精悍的”手机录屏软件
  • 【C++】类型转换
  • 抖音怎么下载视频?抖音怎么无水印下载别人的视频
  • 蓝凌的流程引擎队列分发器
  • Python whl安装包简介与制作完全指南
  • 【优选算法】前缀和
  • Windows 下端口占用排查与释放全攻略
  • LeetCode-413. 等差数列划分
  • Go深入学习延迟语句
  • 【QT】输入类控件 详解