Files
2024-04-21 22:47:19 +08:00

114 lines
3.7 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#region Copyright (C) 2016 Kevin (OSS开源系列) 公众号:OSSCore
/***************************************************************************
*   文件功能描述:全局插件 - 日志插件实体及辅助类
*
*   创建人: Kevin
* 创建人Email:1985088337@qq.com
*
*
*****************************************************************************/
#endregion
namespace OSS.Tools.Log
{
/// <summary>
/// 日志写来源
/// </summary>
public static class LogHelper
{
/// <summary>
/// 默认日志工具
/// </summary>
private static readonly IToolLog _defaultLogTool = new DefaultToolLog();
/// <summary>
/// 日志工具提供者
/// </summary>
public static Func<string?, IToolLog>? LogToolProvider { get; set; }
/// <summary>
/// 对日志内容格式化
/// 例如可以 初始化日志Id,加工日志内容 等
/// </summary>
public static Action<LogInfo>? LogFormat { get; set; }
/// <summary>
/// 通过来源名称获取日志来源实例
/// </summary>
/// <param name="sourceName"></param>
/// <returns></returns>
public static IToolLog GetLogWriter(string? sourceName)
{
return LogToolProvider?.Invoke(sourceName) ?? _defaultLogTool;
}
/// <summary>
/// 记录信息
/// </summary>
/// <param name="msg"> 日志信息 </param>
/// <param name="msgKey"> 关键值 </param>
/// <param name="sourceName"> 来源名称 </param>
public static Task<string?> Info(object msg, string? msgKey = null, string sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Info, msg, msgKey, sourceName));
}
/// <summary>
/// 记录警告,用于未处理异常的捕获
/// </summary>
/// <param name="msg"> 日志信息 </param>
/// <param name="msgKey"> 关键值 </param>
/// <param name="sourceName">来源名称</param>
public static Task<string?> Warning(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Warning, msg, msgKey, sourceName));
}
/// <summary>
/// 记录错误,用于捕获到的异常信息记录
/// </summary>
/// <param name="msg"> 日志信息 </param>
/// <param name="msgKey"> 关键值 </param>
/// <param name="sourceName">来源名称</param>
public static Task<string?> Error(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Error, msg, msgKey, sourceName));
}
/// <summary>
/// 记录错误,用于捕获到的异常信息记录
/// </summary>
/// <param name="msg"> 日志信息 </param>
/// <param name="msgKey"> 关键值 </param>
/// <param name="sourceName">来源名称</param>
public static Task<string?> Trace(object msg, string? msgKey = null, string? sourceName = "")
{
return Log(new LogInfo(LogLevelEnum.Trace, msg, msgKey, sourceName));
}
/// <summary>
/// 记录日志
/// </summary>
/// <param name="info"></param>
private static async Task<string?> Log(LogInfo info)
{
try
{
LogFormat?.Invoke(info);
await GetLogWriter(info.source_name).WriteLogAsync(info);
}
catch
{
// 写日志本身不能再出错误,这里做特殊处理
}
return info.trace_no;
}
}
}