C# Enterprise Library日志记录辅助类实现
在C#开发中,使用结构化日志记录有助于追踪程序状态与排查故障。本文将展示如何封装一个基于Enterprise Library的日志辅助类LogHelper,简化Debug、Error等信息的写入流程,并提供实际的调用代码。
日志帮助类设计与实现
该方案依赖 Microsoft Enterprise Library Logging Application Block。通过构建 LogHelper 静态类,将复杂的日志配置逻辑封装在后端,外部调用只需关注日志内容与类型。
核心组件解析:
Dictionary<string, object>:用于存储扩展属性(ExtendedProperties),如操作人、模块名称等元数据。LogEntry:核心实体,设置优先级(Priority)、严重性(Severity)、时间戳(TimeStamp)及消息内容。Logger.Write(log):执行实际写入操作。
第1步:定义基础信息记录方法
目的:提供统一的内部入口,处理不同严重级别的日志。
- 初始化字典,添加分类属性(如“属性”)和日志内容(如“内容”)。
- 创建类别集合,标记为“General”或特定业务类别。
- 实例化
LogEntry,填充参数并调用Logger.Write。
public class LogHelper
{
private static void Info(string category, int priority, TraceEventType severity, string message)
{
IDictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("属性:", category);
dic.Add("内容:", message);
ICollection<string> coll = new List<string>();
coll.Add("General");
LogEntry log = new LogEntry();
log.Priority = priority;
log.Severity = severity;
log.Message = category;//"日志测试";
log.TimeStamp = DateTime.Now;
log.ExtendedProperties = dic;//记录额外的信息
log.Categories = coll;//设置记录的日志类型
Logger.Write(log);
}
}
第2步:封装常用日志级别接口
目的:简化日常开发,无需每次手动传入 TraceEventType 和优先级。
public static void Debug(string message)
{
Info("Debug", 1, TraceEventType.Information, message);
}
public static void DebugFormat(string format, params object[] args)
{
Info("Debug", 1, TraceEventType.Information, String.Format(format, args));
}
public static void Trace(string message)
{
Info("Trace", 1, TraceEventType.Information, message);
}
public static void TraceFormat(string format, params object[] args)
{
Info("Trace", 1, TraceEventType.Information, String.Format(format, args));
}
第3步:实现错误日志处理与格式化
目的:专门处理错误场景,支持普通文本、格式化字符串以及异常对象输出。
public static void Error(string message)
{
Info("Error", 1, TraceEventType.Error, message);
}
public static void ErrorFormat(string format, params object[] args)
{
Info("Error", 1, TraceEventType.Error, String.Format(format, args));
}
public static void Error(object obj, Exception ex)
{
Info("Error", 1, TraceEventType.Error, String.Format("Error Info:{0},{1}", obj, ex.Message));
}
//通用日志写入
public static void WriteLog(string errorTitle, string properties, string content)
{
IDictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("属性:", properties);
dic.Add("内容:", content);
ICollection<string> coll = new List<string>();
coll.Add("General");
LogEntry log = new LogEntry();
log.Message = errorTitle;//"日志测试";
log.TimeStamp = DateTime.Now;
log.ExtendedProperties = dic;//记录额外的信息
log.Categories = coll;//设置记录的日志类型
Logger.Write(log);
}
实际应用案例
以下展示了在DAL层根据编号获取操作员姓名时的异常处理用法。当执行SQL查询发生异常时,利用 ErrorFormat 记录关键错误上下文,确保问题可追溯。
#region 根据JobNO获取对应操作人员姓名 EMPLOYEE 表
/// <summary>
/// 根据JobNO获取对应操作人员姓名
/// </summary>
/// <param name="jobNo">JobNO</param>
/// <returns></returns>
public static string GetManagerNameByjobNo(string jobNo)
{
string strSql = "select IN_USER from IMPGTBILL where JOB_NO=@jobNo";
try
{
object temp = SqlHelper.Instance("Conn_GM")
.ExecuteScalar(strSql, new[] { new SqlParameter("@jobNo", jobNo) });
if (temp != null)
{
return temp.ToString();
}
return "";
}
catch (Exception e)
{
LogHelper.ErrorFormat("OrderTitle_DAL.GetManagerNameByjobNo:{0}", e.Message);
return null;
}
}
#endregion
以上就是C# Enterprise Library日志辅助类的详细内容,更多关于C#日志管理优化资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













