using System;
using UnityEngine;
namespace TapSDK.Core.Internal.Log
{
public class TapLog
{
private const string TAG = "TapSDK";
// 颜色常量
private const string InfoColor = "#FFFFFF"; // 白色
private const string WarningColor = "#FFFF00"; // 黄色
private const string ErrorColor = "#FF0000"; // 红色
private const string MainThreadColor = "#00FF00"; // 绿色
private const string IOThreadColor = "#FF00FF"; // 紫色
private const string TagColor = "#00FFFF"; // 青色
// 开关变量,控制是否启用日志输出
public static bool Enabled = false;
private string module;
private string tag;
public TapLog(string module, string tag = TAG)
{
this.tag = tag;
this.module = module;
}
public void Log(string message, string detail = null)
{
TapLog.Log(message, detail, tag, module);
}
// 输出带有自定义颜色和标签的警告
public void Warning(string message, string detail = null)
{
TapLog.Warning(message, detail, tag, module);
}
// 输出带有自定义颜色和标签的错误
public void Error(string message, string detail = null)
{
TapLog.Error(message, detail, tag, module);
}
public static void Error(Exception e)
{
TapLog.Error(e?.Message ?? "");
}
// 输出带有自定义颜色和标签的普通日志
public static void Log(string message, string detail = null, string tag = TAG, string module = null)
{
if (string.IsNullOrEmpty(message))
{
return;
}
string msg = GetFormattedMessage(message: message, detail: detail, colorHex: InfoColor, tag: tag, module: module);
if (TapLogger.LogDelegate != null)
{
TapLogger.Debug(msg);
return;
}
if (Enabled)
{
Debug.Log(msg);
}
}
// 输出带有自定义颜色和标签的警告
public static void Warning(string message, string detail = null, string tag = TAG, string module = null)
{
if (string.IsNullOrEmpty(message))
{
return;
}
string msg = GetFormattedMessage(message: message, detail: detail, colorHex: WarningColor, tag: tag, module: module);
if (TapLogger.LogDelegate != null)
{
TapLogger.Warn(msg);
return;
}
if (Enabled)
{
Debug.LogWarning(msg);
}
}
// 输出带有自定义颜色和标签的错误
public static void Error(string message, string detail = null, string tag = TAG, string module = null)
{
if (string.IsNullOrEmpty(message))
{
return;
}
string msg = GetFormattedMessage(message: message, detail: detail, colorHex: ErrorColor, tag: tag, module: module);
if (TapLogger.LogDelegate != null)
{
TapLogger.Error(msg);
return;
}
Debug.LogError(msg);
}
// 格式化带有颜色和标签的消息
private static string GetFormattedMessage(string message, string detail, string colorHex, string tag, string module)
{
string threadInfo = GetThreadInfo();
string tagColor = TagColor;
if (module != null && module != "")
{
tag = $"{tag}.{module}";
}
if (IsMobilePlatform())
{
return $"[{tag}] {threadInfo} {message}\n{detail}";
}
else
{
return $"[{tag}] {threadInfo} {message}\n{detail}\n";
}
}
// 获取当前线程信息
private static string GetThreadInfo()
{
bool isMainThread = System.Threading.Thread.CurrentThread.IsAlive && System.Threading.Thread.CurrentThread.ManagedThreadId == 1;
string threadInfo = isMainThread ? "Main" : $"IO {System.Threading.Thread.CurrentThread.ManagedThreadId}";
if (IsMobilePlatform())
{
// 移动平台的线程信息不使用颜色
return $"({threadInfo})";
}
else
{
// 其他平台的线程信息使用颜色
string color = isMainThread ? MainThreadColor : IOThreadColor;
return $"({threadInfo})";
}
}
// 检查是否是移动平台
private static bool IsMobilePlatform()
{
return Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer;
}
}
}