using System;
using System.Runtime.CompilerServices;
namespace VCommon.Logging
{
/// 日志入口,可在运行时指定目标
public static class Logger
{
private static ILogger _target = new ConsoleLogger();
private static bool _enableDebugLevel;
private static Action _debug;
/// 指定日志目标
public static void Init(ILogger target)
{
if (target is DefaultLogger) throw new ArgumentException($"Can not use {nameof(DefaultLogger)}");
_target = target;
if (EnableDebugLevel) _debug = _target.Debug;
}
/// 启用Debug级别日志
public static bool EnableDebugLevel
{
get => _enableDebugLevel;
set
{
_enableDebugLevel = value;
_debug = value ? _target.Debug : (Action)null;
}
}
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Debug(string summary, object moreInfo = null) => _debug?.Invoke(summary, moreInfo);
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Trace(string summary, object moreInfo = null) => _target.Trace(summary, moreInfo);
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Info(string summary, object moreInfo = null) => _target.Info(summary, moreInfo);
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Warn(string summary, object moreInfo = null) => _target.Warn(summary, moreInfo);
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Error(string summary, object moreInfo = null) => _target.Error(summary, moreInfo);
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public static void Fatal(string summary, object moreInfo = null) => _target.Fatal(summary, moreInfo);
}
}