C# Enterprise Library日志记录辅助类实现

许南星
许南星
发布时间:2026-10-14| 5人浏览过
原创

在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步:定义基础信息记录方法

目的:提供统一的内部入口,处理不同严重级别的日志。

  1. 初始化字典,添加分类属性(如“属性”)和日志内容(如“内容”)。
  2. 创建类别集合,标记为“General”或特定业务类别。
  3. 实例化 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 表
/// &lt;summary&gt;
/// 根据JobNO获取对应操作人员姓名
/// &lt;/summary&gt;
/// &lt;param name="jobNo"&gt;JobNO&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
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#日志管理优化资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。