protected abstract string WriteEvent(LogEvent logEvent);
/// <summary> /// Adds a record to the log. /// </summary> /// <param name="level"> The level of the message (0 = Info, 1 = Warning, 2 = Error). </param> /// <param name="message"> The message body. </param> /// <param name="ex"> The exception raised. </param> /// <param name="objects"> objects to seiralise to XML and store. </param> /// <returns> Log event Id. </returns> public string Add(int level, string message, Exception ex, object objects) { var logEvent = new LogEvent { Level = level, Message = message, Exception = ex, Objects = objects, Date = DateTime.Now, ExecutingMachine = Environment.MachineName }; //if (OperationContext.Current != null // && OperationContext.Current.IncomingMessageHeaders != null // && OperationContext.Current.IncomingMessageHeaders.FindHeader("Username", "Peninsula.Common") > -1 // && OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("Username", "Peninsula.Common") != null) //{ // logEvent.User = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("Username", "Peninsula.Common"); //} //if (HttpContext.Current != null // && HttpContext.Current.User != null // && HttpContext.Current.User.Identity.Name != null) //{ // logEvent.User = HttpContext.Current.User.Identity.Name; //} //else if (WindowsIdentity.GetCurrent() != null) //{ // logEvent.User = WindowsIdentity.GetCurrent().Name; //} //if (HttpContext.Current != null) //{ // if (HttpContext.Current.Items["ContextGuid"] == null) // { // HttpContext.Current.Items["ContextGuid"] = Guid.NewGuid(); // } // logEvent.ContextGuid = (Guid)HttpContext.Current.Items["ContextGuid"]; //} //else if (OperationContext.Current != null) //{ // var contextGuidExtension = // OperationContext.Current.Extensions.Find<ContextGuidExtension>(); // if (contextGuidExtension == null) // { // contextGuidExtension = new ContextGuidExtension {ContextGuid = Guid.NewGuid()}; // OperationContext.Current.Extensions.Add(contextGuidExtension); // } // logEvent.ContextGuid = contextGuidExtension.ContextGuid; //} var stackTrace = new StackTrace(); var stackFrames = stackTrace.GetFrames(); foreach (StackFrame stackFrame in stackFrames) { if (stackFrame.GetMethod().DeclaringType != null) { var declaringType = stackFrame.GetMethod().DeclaringType; if (declaringType != null) { var logIgnoreAttribute = (LogIgnoreAttribute) Attribute.GetCustomAttribute(declaringType, typeof (LogIgnoreAttribute)); if (logIgnoreAttribute == null) { logEvent.CallingMethod = stackFrame.GetMethod().Name; logEvent.CallingClass = declaringType.Name; logEvent.CallingAssembly = declaringType.Assembly.GetName().Name; break; } } } } return WriteEvent(logEvent); }
protected override string WriteEvent(LogEvent logEvent) { Console.WriteLine(logEvent.Message); var cn = new SqlConnection(_connectionString); var cmd = new SqlCommand("INSERT INTO LogEvent " + "([Date], [Level], [Message], [User], [Exception], [Objects], " + "[ExecutingMachine], [CallingAssembly], [CallingClass], [CallingMethod], " + "[ContextGuid]) VALUES (" + "@Date, @Level, @Message, @User, @Exception, @Objects, " + "@ExecutingMachine, @CallingAssembly, @CallingClass, @CallingMethod, " + "@ContextGuid); SELECT SCOPE_IDENTITY() AS LogEventId; ", cn); cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = logEvent.Date; cmd.Parameters.Add("@Level", SqlDbType.Int).Value = logEvent.Level; cmd.Parameters.Add("@Message", SqlDbType.VarChar, 100).Value = SetObjectToNull(logEvent.Message); cmd.Parameters.Add("@User", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.User); cmd.Parameters.Add("@Exception", SqlDbType.VarChar, Int32.MaxValue); if (logEvent.Exception != null) { cmd.Parameters["@Exception"].Value = logEvent.Exception.ToString(); } else { cmd.Parameters["@Exception"].Value = DBNull.Value; } cmd.Parameters.Add("@Objects", SqlDbType.Xml); if (logEvent.Objects != null) { cmd.Parameters["@Objects"].Value = DataContractObjectSerializer.Serialize(logEvent.Objects); } else { cmd.Parameters["@Objects"].Value = DBNull.Value; } cmd.Parameters.Add("@ExecutingMachine", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.ExecutingMachine); cmd.Parameters.Add("@CallingAssembly", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.CallingAssembly); cmd.Parameters.Add("@CallingClass", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.CallingClass); cmd.Parameters.Add("@CallingMethod", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.CallingMethod); cmd.Parameters.Add("@ContextGuid", SqlDbType.VarChar, 50).Value = SetObjectToNull(logEvent.ContextGuid.ToString()); string logEventId = null; try { cn.Open(); var dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (dr.Read()) { logEventId = dr["LogEventId"].ToString(); } } finally { cmd.Dispose(); cn.Close(); } return logEventId; }