文章目录
使用
// 调试日志
Log.Debug("Hello, world!");
// 信息日志
Log.Info("Hello, world!");
// 警告日志
Log.Warning("Hello, world!");
// 错误日志
Log.Error("Hello, world!");
// 严重错误日志
Log.Fatal("Hello, world!");
分析
Unity脚本
Log
Unity脚本调用该类来打印日志。
(内部就是转发了框架中的 GameFrameworkLog类 )
代码
using GameFramework;
using System.Diagnostics;
namespace UnityGameFramework.Runtime
{
/// <summary>
/// 日志工具集。
/// </summary>
public static class Log
{
/// <summary>
/// 打印调试级别日志,用于记录调试类日志信息。
/// </summary>
/// <param name="message">日志内容。</param>
/// <remarks>仅在带有 DEBUG 预编译选项且带有 ENABLE_LOG、ENABLE_DEBUG_LOG 或 ENABLE_DEBUG_AND_ABOVE_LOG 预编译选项时生效。</remarks>
[Conditional("ENABLE_LOG")]
[Conditional("ENABLE_DEBUG_LOG")]
[Conditional("ENABLE_DEBUG_AND_ABOVE_LOG")]
public static void Debug(object message)
{
GameFrameworkLog.Debug(message);
}
// 省略代码...
}
}
注意点
- 静态类(工具类)
- 使用 预处理指令(宏) 与 Conditional特性 设置是否忽略方法调用
- 预处理指令使用 LogScriptingDefineSymbols类 与 ScriptingDefineSymbols类 进行设置
ConditionalAttribute(Conditional特性)
指示编译器,除非定义了指定的有条件编译符号,否则,应忽略方法调用或属性。
参考文档
保留的特性:ConditionalAttribute, ObsoleteAttribute, AttributeUsageAttribute
LogScriptingDefineSymbols
设置Log相关的预处理指令
在Unity编辑器中生成菜单项(让使用者快速设置日志等级)
代码
using UnityEditor;
namespace UnityGameFramework.Editor
{
/// <summary>
/// 日志脚本宏定义。
/// </summary>
public static class LogScriptingDefineSymbols
{
private const string EnableLogScriptingDefineSymbol = "ENABLE_LOG";
private const string EnableDebugAndAboveLogScriptingDefineSymbol = "ENABLE_DEBUG_AND_ABOVE_LOG";
private const string EnableInfoAndAboveLogScriptingDefineSymbol = "ENABLE_INFO_AND_ABOVE_LOG";
private const string EnableWarningAndAboveLogScriptingDefineSymbol = "ENABLE_WARNING_AND_ABOVE_LOG";
private const string EnableErrorAndAboveLogScriptingDefineSymbol = "ENABLE_ERROR_AND_ABOVE_LOG";
private const string EnableFatalAndAboveLogScriptingDefineSymbol = "ENABLE_FATAL_AND_ABOVE_LOG";
private const string EnableDebugLogScriptingDefineSymbol = "ENABLE_DEBUG_LOG";
private const string EnableInfoLogScriptingDefineSymbol = "ENABLE_INFO_LOG";
private const string EnableWarningLogScriptingDefineSymbol = "ENABLE_WARNING_LOG";
private const string EnableErrorLogScriptingDefineSymbol = "ENABLE_ERROR_LOG";
private const string EnableFatalLogScriptingDefineSymbol = "ENABLE_FATAL_LOG";
private static readonly string[] AboveLogScriptingDefineSymbols = new string[]
{
EnableDebugAndAboveLogScriptingDefineSymbol,
EnableInfoAndAboveLogScriptingDefineSymbol,
EnableWarningAndAboveLogScriptingDefineSymbol,
EnableErrorAndAboveLogScriptingDefineSymbol,
EnableFatalAndAboveLogScriptingDefineSymbol
};
private static readonly string[] SpecifyLogScriptingDefineSymbols = new string[]
{
EnableDebugLogScriptingDefineSymbol,
EnableInfoLogScriptingDefineSymbol,
EnableWarningLogScriptingDefineSymbol,
EnableErrorLogScriptingDefineSymbol,
EnableFatalLogScriptingDefineSymbol
};
/// <summary>
/// 禁用所有日志脚本宏定义。
/// </summary>
[MenuItem("Game Framework/Log Scripting Define Symbols/Disable All Logs", false, 30)]
public static void DisableAllLogs()
{
ScriptingDefineSymbols.RemoveScriptingDefineSymbol(EnableLogScriptingDefineSymbol);
foreach (string specifyLogScriptingDefineSymbol in SpecifyLogScriptingDefineSymbols)
{
ScriptingDefineSymbols.RemoveScriptingDefineSymbol(specifyLogScriptingDefineSymbol);
}
foreach (string aboveLogScriptingDefineSymbol in AboveLogScriptingDefineSymbols)
{
ScriptingDefineSymbols.RemoveScriptingDefineSymbol(aboveLogScriptingDefineSymbol);
}
}
/// <summary>
/// 开启所有日志脚本宏定义。
/// </summary>
[