Unity 工具 之 日志保存本地,并且邮件附件发送到邮箱(线程中写入和邮件(Gmail)发送,不占用主线程)
目录
Unity 工具 之 日志保存本地,并且邮件附件发送到邮箱(线程中写入和邮件(Gmail)发送,不占用主线程)
一、简单介绍
Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。
本节介绍,来获取Unity的日志,并且保存下来,发送到指定邮箱,以供查阅;如果直接在主线程保存日志和发送日志,涉及到文件的读写,如果读写内容过大,会明显抢占主线程资源,造成卡顿,这里使用 Thread 进行日志的保存和邮件发送,避免造成主线程卡顿,这里简单说明,如果你有更好的方法,欢迎留言交流。
二、实现原理
1、Application.logMessageReceived += HandleLog; 来获取Unity 日志
2、StreamWriter 开启一个写入流,进行数据写入
3、SmtpClient 进行邮件发送
三、注意事项
1、日志可以根据类型 LogType,进行日志过滤
2、涉及到多线程数据写入,存在资源竞争现象,定义一个volatile变量threadLocker 来处理
private volatile object threadLocker = new object();
3、注意发送邮箱开通 smtp 服务,这里以 Gmail 为例
QQ 邮箱,可以参见博文:Unity 工具类 之 发送邮件功能的简单封装 SendEmailWrapper_仙魁XAN-CSDN博客
4、注意有些 必须在 Unity 主线程处理
四、效果预览
五、实现步骤
Log 获取保存本地
1、打开 unity 新建空工程
2、编写脚本,实现日志获取,并通过开启线程实现本地化保存
3、把脚本,对应挂载到场景中
4、运行场景,实现日志的写入保存
邮件 发送保存的日志
1、打开 unity 新建空工程
2、编写代码,实现邮件发送功能
3、把对应脚本,挂载到场景中
4、运行场景,发送邮件,邮箱收到邮件
六、关键代码
Log 获取保存本地
1、ThreadFileWriterManager
using System;
using System.Collections.Generic;
using System.Text;
namespace ThreadFileWriter
{
public enum EThreadFileType
{
TEST,
LOG,
}
public struct EThreadFileTypeCompare : IEqualityComparer<EThreadFileType>
{
public bool Equals(EThreadFileType x, EThreadFileType y)
{
return (int)x == (int)y;
}
public int GetHashCode(EThreadFileType obj)
{
return (int)obj;
}
}
public class ThreadFileWriterManager
{
private static ThreadFileWriterManager _Instance;
public static ThreadFil