using log4net.Core; using log4net.Layout.Pattern; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LogServer { /// /// 一般操作 /// public class ExceptionLogMessage { /// /// 操作人 /// public string Operationer { get; set; } /// /// 客户端IP /// public string IP { get; set; } /// /// 浏览器请求头 /// public string Header { get; set; } /// /// 请求地址 /// public string Url { get; set; } /// /// 功能点名称 /// public string ActionName { get; set; } public Exception exception { get; set; } public override string ToString() { return string.Format("功能点:{0} \n操作者:{1} \nIP:{2} \n头部信息:{3} \n来自页面:{4} 错误信息:{5}", ActionName, Operationer, IP, Header, Url, exception.ToString()); } } public class ExceptionLayout : log4net.Layout.PatternLayout { public ExceptionLayout() { this.AddConverter("exceptionMessage", typeof(ExceptionPatternConverter)); this.AddConverter("ActionName", typeof(ActionNameExceptionPatternConverter)); this.AddConverter("Operationer", typeof(OperationerExceptionPatternConverter)); this.AddConverter("IP", typeof(IPExceptionPatternConverter)); this.AddConverter("Header", typeof(HeaderExceptionPatternConverter)); this.AddConverter("Url", typeof(UrlExceptionPatternConverter)); } } internal sealed class ActionNameExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.ActionName); } } internal sealed class OperationerExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.Operationer); } } internal sealed class IPExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.IP); } } internal sealed class HeaderExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.Header); } } internal sealed class UrlExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.Url); } } internal sealed class ExceptionPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { ExceptionLogMessage logMessage = loggingEvent.MessageObject as ExceptionLogMessage; if (logMessage != null) writer.Write(logMessage.exception.ToString()); } } }