特点
显示时间,精确到毫秒 显示当前帧数(在主线程中的打印才有意义,非主线程显示为-1) 有三种条件编译符(如下图) 注: 要能显示线程中的当前帧数,要在app启动时,初始化mainThreadID字段 条件编译符的好处是,不需要的要打印的log调用不会产生任何额外的消耗。 如需要打印输出到文件,请自行扩展,写文件时建议用子线程执行
上代码
using System ;
using System. Diagnostics ;
using System. Threading ;
using UnityEngine ;
using Debug = UnityEngine. Debug ;
using Object = UnityEngine. Object ;
namespace Main
{
public class XDebug
{
public static int mainThreadID { get ; set ; } = - 1 ;
static bool _enable = true ;
public static bool Enable {
get { return _enable; }
set {
if ( value != _enable)
{
Debug. unityLogger. logEnabled = value ;
_enable = value ;
}
}
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
public static void Log ( object message, Object context= null )
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , message) ;
Debug. Log ( log, context) ;
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
public static void LogFormat ( Object context, string format, params object [ ] args)
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , format) ;
Debug. LogFormat ( context, log, args) ;
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_WARM_ERROR" ) ]
public static void LogWarning ( object message, Object context= null )
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , message) ;
Debug. LogWarning ( log, context) ;
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_WARM_ERROR" ) ]
public static void LogWarningFormat ( Object context, string format, params object [ ] args)
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , format) ;
Debug. LogWarningFormat ( context, log, args) ;
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_ERROR" ) ]
public static void LogError ( object messag, Object context= null )
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , messag) ;
Debug. LogError ( log, context) ;
}
[ Conditional ( "DEBUG_LOG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_WARM_ERROR" ) ]
[ Conditional ( "DEBUG_ERROR" ) ]
public static void LogErrorFormat ( Object context, string format, params object [ ] args)
{
if ( ! _enable) return ;
string log = string . Concat ( GetPrefix ( ) , format) ;
Debug. LogErrorFormat ( context, log, args) ;
}
public static void Assert ( bool condition, object message, Object context= null )
{
if ( ! _enable) return ;
Debug. Assert ( condition, message, context) ;
}
public static void LogException ( Exception e, Object context= null )
{
if ( ! _enable) return ;
Debug. LogException ( e, context) ;
}
static string GetPrefix ( )
{
int curFrame = - 1 ;
if ( Thread. CurrentThread. ManagedThreadId == mainThreadID)
{
curFrame = Time. frameCount;
}
string curTime = DateTime. Now. ToString ( "HH:mm:ss.fff" ) ;
return $"[ { curTime } ][ { curFrame } ] " ;
}
}
}
打个赏吧