写入数据库中第一步需要修改配置文件:
对于自定义消息类型
需要定义:
public class CustomPatternLayout : PatternLayout {
public CustomPatternLayout() {
// 添加自定义属性转换
this.AddConverter("property", typeof(CustomPatternLayoutConverter));
}
}
CustomPatternLayoutConverter:
public class CustomPatternLayoutConverter : PatternLayoutConverter {
///
/// 重写转换方法
///
///
///
protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent) {
if (null != this.Option) {
WriteObject(writer, loggingEvent.Repository, LookupProperty(this.Option, loggingEvent));
} else {
WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
}
}
private object LookupProperty(string property, LoggingEvent loggingEvent) {
object propertyValue = string.Empty;
PropertyInfo info = loggingEvent.MessageObject.GetType().GetProperty(property);
if (null != info)
propertyValue = info.GetValue(loggingEvent.MessageObject, null);
return propertyValue;
}
}
数据库:
create table Log(
[nId] [bigint] IDENTITY(1,1) NOT NULL,
[dtDate] [datetime] NOT NULL,
[sThread] [nvarchar](100) NOT NULL,
[sLevel] [nvarchar](200) NOT NULL,
[sLogger] [nvarchar](500) NOT NULL,
[sMessage] [nvarchar](3000) NULL,
[sUserName] [nvarchar] (50) NULL,
[sException] [nvarchar](4000) NULL
)
test:
static void Main(string[] args) {
ILog log = null;
try {
log4net.Config.XmlConfigurator.Configure(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
log = LogManager.GetLogger("test");
log.Info(new CustomLogMessage() {
UserName = "Mr.k",
Message = "custom msg",
});
throw new Exception("异常啦!!");
} catch (Exception error) {
Console.WriteLine(error);
log.Error(new CustomLogMessage() {
UserName = "Mr.k",
Message = "err msg",
}, error);
}
Console.ReadKey();
}
查看数据库结果: