您的位置:首页 > 其它

一个Log系统,客户端运行起来,排除那些可以输出(dll文件)

2017-08-09 15:39 471 查看
工程需要,类似这样的一个LOG系统,想了好多方法,最后还是从别人的项目中抄下来的,哈哈!!

目前只支持在运行起来后切换,后续还会弄一下在不运行的状态下支持切换,输出到手机屏幕上,慢慢弄吧!!

现在这个工程,Dubug.Log不好用,没效果,现在只好用Dubug.ErrorLog了!!

上代码:

先是VS写的,用来生成DLL文件,这样可以双击LOG可以跳过去



LLog类:

using System;
using System.Diagnostics;
using System.IO;
using UnityEngine;
using System.Text;
using Debug = UnityEngine.Debug;

public class LLog
{
/// <summary>
/// 掩码
/// </summary>
public static bool StoreMaskInLocal = false;
private static MaskDef _Mask = (MaskDef)0;

public static Jc Jc = new Jc();
public static Lxf Lxf = new Lxf();

/// <summary>
/// 记录现在那些按钮点亮了
/// </summary>
public static MaskDef Mask
{
get
{
MaskDef result;
if (LLog.StoreMaskInLocal)
{
result = (MaskDef)PlayerPrefs.GetInt("LLogMask", 4128);
}
else
{
result = LLog._Mask;
}
return result;
}
set
{
if (LLog.StoreMaskInLocal)
{
PlayerPrefs.SetInt("LLogMask", (int)value);
}
else
{
LLog._Mask = value;
}
}
}

/// <summary>
/// 判断按钮是否亮的
/// </summary>
/// <param name="flag"></param>
/// <returns></returns>
public static bool IsEnabled(MaskDef flag)
{
return BitMask.IsEnabled(LLog.Mask, flag);
}

/// <summary> 默认日志 </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Log(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Log)) return;
StandardLog(format, args);
}

/// <summary> 默认日志+颜色 </summary>
/// <param name="format"></param>
/// <param name="color"></param>
public static void Log(string format, LogColor color)
{
if (!IsEnabled(MaskDef.Log)) return;
switch (color)
{
case LogColor.Red:
Log("<color=red>" + format + "</color>", null);
break;
case LogColor.Yellow:
Log("<color=yellow>" + format + "</color>", null);
break;
}
}

/// <summary>
/// 模块
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Module(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Module)) return;
StandardLog("<color=lightblue>" + format + "</color>", args);
}

/// <summary>
/// 资源
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Resource(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Resource)) return;
StandardLog("<color=olive>" + format + "</color>", args);
}

/// <summary>
/// 属性
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Attribute(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Attribute)) return;
StandardLogWithOutReplace("<color=lime>" + format + "</color>", args);
}

protected static void StandardLogWithOutReplace(string format, params object[] args)
{
if (string.IsNullOrEmpty(format)) return;

if (args == null || args.Length == 0)
{
Debug.LogError(format);
}
else
{
Debug.LogErrorFormat(format, args);
}
}

/// <summary>
/// 网络
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void NetWork(string format, params object[] args)
{
if (!IsEnabled(MaskDef.NetWork)) return;
StandardLog("<color=yellow>" + format + "</color>", args);
}

/// <summary>
/// 战斗数据
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
[Conditional("UNITY_EDITOR")]
public static void Battle(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Battle)) return;
StandardLog("<color=teal>" + format + "</color>", args);
}

/// <summary>
/// 警告
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Alert(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Alert)) return;
StandardLogWithOutReplace("<color=orange>" + format + "</color>", args);
}

/// <summary>
/// 错误
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Error(string format, params object[] args)
{
StandardLogWithOutReplace("<color=red>" + format + "</color>", args);
}

/// <summary>
/// 所有平台
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void AllPlatform(string format, params object[] args)
{
StandardLog("<color=magenta><size=23>" + format + "</size></color>", args);
}

/// <summary>
/// 游戏流程
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void Process(string format, params object[] args)
{
if (!IsEnabled(MaskDef.Process)) return;
StandardLog("<color=green>" + format + "</color>", args);
}

/// <summary>
/// 写入文件
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void File(string format, params object[] args)
{
if (!IsEnabled(MaskDef.File)) return;
string fileName = "NoNameLogFile.txt";
CreateLogFile(string.Format(format, args), fileName);
}

private static void CreateLogFile(string writeInfo, string fileName)
{
string str = Application.dataPath + "/LogFiles/";
FileInfo fileInfo = new FileInfo(str + fileName);
StreamWriter streamWriter;
if (!fileInfo.Exists)
{
streamWriter = fileInfo.CreateText();
}
else
{
streamWriter = fileInfo.AppendText();
}
streamWriter.WriteLine(writeInfo);
streamWriter.Flush();
streamWriter.Close();
}

/// <summary> 输出LOG </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void StandardLog(string format, params object[] args)
{
if (string.IsNullOrEmpty(format)) return;

if (args == null || args.Length == 0)
{
Debug.LogError(format);
}
else
{
if (StoreMaskInLocal)
{
StringBuilder stringBuilder = new StringBuilder(format);
stringBuilder.Replace("{0}", "[<color=#FFC000FF><size=25>{0}</size></color>]");
stringBuilder.Replace("{1}", "[<color=#FFC000FF><size=25>{1}</size></color>]");
stringBuilder.Replace("{2}", "[<color=#FFC000FF><size=25>{2}</size></color>]");
stringBuilder.Replace("{3}", "[<color=#FFC000FF><size=25>{3}</size></color>]");
stringBuilder.Replace("{4}", "[<color=#FFC000FF><size=25>{4}</size></color>]");
stringBuilder.Replace("{5}", "[<color=#FFC000FF><size=25>{5}</size></color>]");
stringBuilder.Replace("{6}", "[<color=#FFC000FF><size=25>{6}</size></color>]");
stringBuilder.Replace("{7}", "[<color=#FFC000FF><size=25>{7}</size></color>]");
stringBuilder.Replace("{8}", "[<color=#FFC000FF><size=25>{8}</size></color>]");
stringBuilder.Replace("{9}", "[<color=#FFC000FF><size=25>{9}</size></color>]");
stringBuilder.Replace("{10}", "[<color=#FFC000FF><size=25>{10}</size></color>]");
stringBuilder.Replace("{11}", "[<color=#FFC000FF><size=25>{11}</size></color>]");
stringBuilder.Replace("{12}", "[<color=#FFC000FF><size=25>{12}</size></color>]");
stringBuilder.Replace("{13}", "[<color=#FFC000FF><size=25>{13}</size></color>]");
stringBuilder.Replace("{14}", "[<color=#FFC000FF><size=25>{14}</size></color>]");
format = string.Format(stringBuilder.ToString(), args);
}
Debug.LogErrorFormat(format, args);
}
}

public enum LogColor
{
Red,
Yellow
}
}

[Flags]
public enum MaskDef
{
Jc = 1,
Lxf = 2,

Log = 32,
Module = 64,
NetWork = 128,
Battle = 256,
Attribute = 512,
Resource = 1024,
Process = 2048,
Alert = 4096,
File = 8192
}


BitMask类
using System;

public class BitMask
{
public static bool IsEnabled(MaskDef flags, MaskDef flag)
{
return (flags & flag) != (MaskDef)0;
}

public static MaskDef Enable(MaskDef flags, MaskDef flag)
{
return flags | flag;
}

public static MaskDef Disable(MaskDef flags, MaskDef flag)
{
return flags & ~flag;
}
}


LogSwitch类
using System;
using UnityEngine;

public class LogSwitch : MonoBehaviour
{
private static bool logSwitch = false;

private static bool isEditorPlatForm = false;

public static bool CurrentLogSwitch
{
get
{
return logSwitch;
}
set
{
logSwitch = value;
}
}

public static bool CurrentIsEditorPlatform
{
get
{
return isEditorPlatForm;
}
set
{
isEditorPlatForm = value;
}
}
}


UserLogger类
using System;
using System.Text;
using UnityEngine;

public class UserLogger
{
protected static void StandardLog(string format, params object[] args)
{
if (string.IsNullOrEmpty(format)) return;
if (args.Length == 0)
{
Debug.LogError("<color=lightblue>" + format + "</color>");
}
else
{
if (LLog.StoreMaskInLocal)
{
StringBuilder stringBuilder = new StringBuilder(format);
stringBuilder.Replace("{0}", "[<color=#FFC000FF><size=25>{0}</size></color>]");
stringBuilder.Replace("{1}", "[<color=#FFC000FF><size=25>{1}</size></color>]");
stringBuilder.Replace("{2}", "[<color=#FFC000FF><size=25>{2}</size></color>]");
stringBuilder.Replace("{3}", "[<color=#FFC000FF><size=25>{3}</size></color>]");
stringBuilder.Replace("{4}", "[<color=#FFC000FF><size=25>{4}</size></color>]");
stringBuilder.Replace("{5}", "[<color=#FFC000FF><size=25>{5}</size></color>]");
stringBuilder.Replace("{6}", "[<color=#FFC000FF><size=25>{6}</size></color>]");
stringBuilder.Replace("{7}", "[<color=#FFC000FF><size=25>{7}</size></color>]");
stringBuilder.Replace("{8}", "[<color=#FFC000FF><size=25>{8}</size></color>]");
stringBuilder.Replace("{9}", "[<color=#FFC000FF><size=25>{9}</size></color>]");
stringBuilder.Replace("{10}", "[<color=#FFC000FF><size=25>{10}</size></color>]");
stringBuilder.Replace("{11}", "[<color=#FFC000FF><size=25>{11}</size></color>]");
stringBuilder.Replace("{12}", "[<color=#FFC000FF><size=25>{12}</size></color>]");
stringBuilder.Replace("{13}", "[<color=#FFC000FF><size=25>{13}</size></color>]");
stringBuilder.Replace("{14}", "[<color=#FFC000FF><size=25>{14}</size></color>]");
format = string.Format(stringBuilder.ToString(), args);
}
Debug.LogWarningFormat(format, args);
}
}
}


加一个开发人员的类
using System;

public class Lxf : UserLogger
{
public void Log(string format, params object[] args)
{
if (!LLog.IsEnabled(MaskDef.Lxf)) return;
StandardLog(format, args);
}
}


放进去,直接生成类库了,我用的是Unity5.3,所以框架要改成3.5,还要引用UnityEngine哦

下一节放编辑器上的代码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐