Unity日志管理
Unity的日志输出在编辑器中,而且格式诡异,不方便查看。着实不利于开发,在Java开发时候我们有Log4j,Logback等日志框架,格式定义舒服又方便。这不Unity好像没有,那就自己打造一个吧。
需求分析
可以输出到文件
异步打印日志,提高性能
追加打印而不是重启重头开始
易于使用
需求实现
做过Java开发的人都知道,Java中的Log4j等日志框架都通过各种各样的Appender来扩展输出实现。
这里只是以一种实现讲解一下思路:
先定义一个Appender的接口
///
/// 日志Appender
///
public interface ILogAppender
{
///
/// 记录日志
///
/// Log.
void Log(LogData logData);
}
来个RollingFileAppender的实现:
public class RollingFileAppender : AsyncTask, ILogAppender
{
#if UNITY_EDITOR
string logRootPath = Application.dataPath + "/Log";
#elif UNITY_STANDALONE_WIN
string logRootPath = Application.dataPath + "/Log";
#elif UNITY_STANDALONE_OSX
string logRootPath = Application.dataPath + "/Log";
#else
string logRootPath = Application.persistentDataPath + "/Log";
#endif
// 时间格式化
protected const string TIME_FORMATER = "yyyy-MM-dd hh:mm:ss,fff";
///
/// 文件最大值 10M
///
private int maxFileSize = 10 * 1024 * 1024;
// 文件Writer
private StreamWriter streamWriter;
// 文件流
private FileStream fileStream;
// 文件路径
private string filePath;
// 写日志队列
private List writeList;
// 等待队列
private List waitList;
// 锁
private object lockObj;
// 是否停止的标志
private bool stopFlag;
///
/// 构造函数
///
public RollingFileAppender ()
{
this.filePath = Path.Combine (logRootPath, "game.log");
if (File.Exists (filePath)) {
this.fileStream = new FileStream (filePath, FileMode.Append);
this.streamWriter = new StreamWriter (this.fileStream);
this.streamWriter.AutoFlush = true;
} else {
if (!Directory.Exists