作者:H-蔡鸿晖_515 | 来源:互联网 | 2023-05-18 23:55
Log4net是.Net下一个非常优秀的开源日志记录组件。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。由于业务需要,计划为日志增
Log4net 是.Net下一个非常优秀的开源日志记录组件。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。
由于业务需要,计划为日志增加2个字段,除了Log4net默认字段,额外增加了LOG_TYPE 和 LOG_OPERATOR 两个字段用于对日志分类和记录相关操作的人员,以便于检索。
本文方法参考了StackOverFlow问答中的内容(https://stackoverflow.com/questions/12139486/log4net-how-to-add-a-custom-field-to-my-logging),
此方法并不需要创建额外的类,使用非常简单。
1、创建数据库表
针对写入数据库的情况,如果写入文本无需创建数据表。
CREATE TABLE [dbo].[SYS_LOG1](
[LOG_ID] [int] IDENTITY(1,1) NOT NULL,
[LOG_DATE] [nvarchar](255) NULL,
[LOG_THREAD] [nvarchar](255) NULL,
[LOG_LEVEL] [nvarchar](50) NULL,
[LOG_LOGGER] [nvarchar](255) NULL,
[LOG_MESSAGE] [nvarchar](4000) NULL,
[LOG_EXCEPTION] [nvarchar](2000) NULL,
[LOG_TYPE] [nvarchar](50) NULL,
[LOG_OPERATOR] [nvarchar](50) NULL,
CONSTRAINT [PK_SYS_LOG2] PRIMARY KEY CLUSTERED
(
[LOG_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
2、添加Log4net 配置AdoNetAppender节点
注意加粗的部分设计自定义字段的配置
3、使用Log4net的上下文来将值传递给参数
//传参
log4net.LogicalThreadContext.Properties["LogType"] = "Custom LogType";
log4net.LogicalThreadContext.Properties["LogOperator"] = "Custom log_operator";
//写日志
Program.sysLog.WarnFormat("TaskCompleteJob.Execute:处理Control任务失败 {0}", sResult);
或者干脆封装几个方法,取代Log4net原有的方法。
///
/// 自定义写入日志方法
///
///
日志类别
///
日志操作者
///
日志信息
public void YwzWarn(string logType,string logOperator ,string logMessage)
{
log4net.LogicalThreadContext.Properties["LogType"] = logType;
log4net.LogicalThreadContext.Properties["LogOperator"] = logOperator;
Program.sysLog.Warn(logMessage);
}
///
/// 自定义写入日志方法
///
///
日志类别
///
日志操作者
///
日志信息
///
异常信息
public void YwzWarn(string logType, string logOperator, string logMessage, Exception exception)
{
log4net.LogicalThreadContext.Properties["LogType"] = logType;
log4net.LogicalThreadContext.Properties["LogOperator"] = logOperator;
Program.sysLog.Warn("TaskCompleteJob.Execute:处理Control任务失败", exception);
}
///
/// 自定义写入日志方法
///
///
日志类别
///
日志操作者
///
日志信息
///
格式化参数
public void YwzWarnFormat(string logType, string logOperator, string messageFormat, params object[] args)
{
log4net.LogicalThreadContext.Properties["LogType"] = logType;
log4net.LogicalThreadContext.Properties["LogOperator"] = logOperator;
Program.sysLog.WarnFormat("TaskCompleteJob.Execute:处理Control任务失败_{0}", args);
}
调用就变的更简单了。
this.YwzWarn("Task", "路人甲", "TaskCompleteJob.Execute:处理Control任务失败");
this.YwzWarn("Task", "路人甲", "TaskCompleteJob.Execute:处理Control任务失败",new Exception("发生异常啦"));
this.YwzWarnFormat("Task", "路人甲", "TaskCompleteJob.Execute:处理Control任务失败_{0}", "12344321abcddcba");
效果如下图。