#region Copyright (C) 2016 Kevin (OSS开源系列) 公众号:OSSCore
/***************************************************************************
* 文件功能描述:全局插件 - 日志插件实体及辅助类
*
* 创建人: Kevin
* 创建人Email:1985088337@qq.com
*
*
*****************************************************************************/
#endregion
namespace OSS.Tools.Log
{
///
/// 日志写来源
///
public static class LogHelper
{
///
/// 默认日志工具
///
private static readonly IToolLog _defaultLogTool = new DefaultToolLog();
///
/// 日志工具提供者
///
public static Func? LogToolProvider { get; set; }
///
/// 对日志内容格式化
/// 例如可以 初始化日志Id,加工日志内容 等
///
public static Action? LogFormat { get; set; }
///
/// 通过来源名称获取日志来源实例
///
///
///
public static IToolLog GetLogWriter(string? sourceName)
{
return LogToolProvider?.Invoke(sourceName) ?? _defaultLogTool;
}
///
/// 记录信息
///
/// 日志信息
/// 关键值
/// 来源名称
public static Task Info(object msg, string? msgKey = null, string sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Info, msg, msgKey, sourceName));
}
///
/// 记录警告,用于未处理异常的捕获
///
/// 日志信息
/// 关键值
/// 来源名称
public static Task Warning(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Warning, msg, msgKey, sourceName));
}
///
/// 记录错误,用于捕获到的异常信息记录
///
/// 日志信息
/// 关键值
/// 来源名称
public static Task Error(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Error, msg, msgKey, sourceName));
}
///
/// 记录错误,用于捕获到的异常信息记录
///
/// 日志信息
/// 关键值
/// 来源名称
public static Task Trace(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Trace, msg, msgKey, sourceName));
}
///
/// 记录日志
///
///
private static async Task Log(LogInfo info)
{
try
{
LogFormat?.Invoke(info);
await GetLogWriter(info.source_name).WriteLogAsync(info);
}
catch
{
// 写日志本身不能再出错误,这里做特殊处理
}
return info.trace_no;
}
}
}