using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Administration; using System.Diagnostics; using System.Runtime.CompilerServices; using System.IO; namespace nova.tmre.tsm.premiumpayment.Common { public class CustomSpLoggingService : SPDiagnosticsServiceBase { public static string NovaDiagnosticAreaName = "SharePoint Custom Code"; public static readonly CustomSpLoggingService Current = new CustomSpLoggingService(); public static string eventLogName = "Application"; private CustomSpLoggingService() : base("Custom SharePoint Logging Service", SPFarm.Local) { try { if (!EventLog.SourceExists(NovaDiagnosticAreaName)) EventLog.CreateEventSource(NovaDiagnosticAreaName, eventLogName); } catch { // do nothing } } public static class DiagnosticCategory { public const string WebPart = "WebPart"; public const string TimerJob = "TimerJob"; public const string FeatureActivation = "FeatureActivation"; public const string FeatureDeactivation = "FeatureDeactivation"; } protected override IEnumerable ProvideAreas() { List areas = new List { new SPDiagnosticsArea(NovaDiagnosticAreaName, new List { new SPDiagnosticsCategory(DiagnosticCategory.WebPart, TraceSeverity.Unexpected, EventSeverity.Error), new SPDiagnosticsCategory(DiagnosticCategory.TimerJob, TraceSeverity.Unexpected, EventSeverity.Error), new SPDiagnosticsCategory(DiagnosticCategory.FeatureActivation, TraceSeverity.Unexpected, EventSeverity.Error), new SPDiagnosticsCategory(DiagnosticCategory.FeatureDeactivation, TraceSeverity.Unexpected, EventSeverity.Error) }) }; return areas; } public void LogDebug(string categoryName, string errorMessage) { #if DEBUG SPDiagnosticsCategory category = CustomSpLoggingService.Current.Areas[NovaDiagnosticAreaName].Categories[categoryName]; this.WriteTrace(0, category, TraceSeverity.Unexpected, errorMessage); string catString = string.Format("{0}:{1}", NovaDiagnosticAreaName, categoryName); System.Diagnostics.Trace.WriteLine(errorMessage, catString); #endif } public void LogMessage(string categoryName, string errorMessage) { SPDiagnosticsCategory category = CustomSpLoggingService.Current.Areas[NovaDiagnosticAreaName].Categories[categoryName]; this.WriteTrace(0, category, TraceSeverity.Unexpected, errorMessage); string catString = string.Format("{0}:{1}", NovaDiagnosticAreaName, categoryName); System.Diagnostics.Trace.WriteLine(errorMessage, catString); } public void LogError(string categoryName, string errorMessage) { try { SPDiagnosticsCategory category = CustomSpLoggingService.Current.Areas[NovaDiagnosticAreaName].Categories[categoryName]; this.WriteTrace(0, category, TraceSeverity.Unexpected, errorMessage); string catString = string.Format("{0}:{1}", NovaDiagnosticAreaName, categoryName); System.Diagnostics.Trace.WriteLine(errorMessage, catString); if (EventLog.SourceExists(NovaDiagnosticAreaName)) { EventLog.WriteEntry(NovaDiagnosticAreaName, errorMessage, EventLogEntryType.Error); } } catch { } } public void LogException(string categoryName, Exception ex) { try { string msg = string.Empty; if (ex.TargetSite != null) { msg = string.Format("{0}.{1}:{2}", ex.TargetSite.DeclaringType.Namespace, ex.TargetSite.DeclaringType.Name, ex.TargetSite.Name); } #region Log to Sharepoint log SPDiagnosticsCategory category = CustomSpLoggingService.Current.Areas[NovaDiagnosticAreaName].Categories[categoryName]; this.WriteTrace(0, category, TraceSeverity.Unexpected, string.Format("{0}: exception: {1}", msg, ex.GetType().Name)); if (!string.IsNullOrEmpty(ex.Message)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.Message); if (!string.IsNullOrEmpty(ex.Source)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.Source); if (!string.IsNullOrEmpty(ex.StackTrace)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.StackTrace); if (ex.InnerException != null) { this.WriteTrace(0, category, TraceSeverity.Unexpected, string.Format("Inner Exception: {0}", ex.InnerException.GetType().Name)); if (!string.IsNullOrEmpty(ex.InnerException.Message)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.InnerException.Message); if (!string.IsNullOrEmpty(ex.InnerException.Source)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.InnerException.Source); if (!string.IsNullOrEmpty(ex.InnerException.StackTrace)) this.WriteTrace(0, category, TraceSeverity.Unexpected, ex.InnerException.StackTrace); } #endregion #region Log to system debug string catString = string.Format("{0}:{1}:{2}", NovaDiagnosticAreaName, categoryName, msg); System.Diagnostics.Trace.WriteLine(string.Format("{0}: exception: {1}", msg, ex.GetType().Name), catString); if (!string.IsNullOrEmpty(ex.Message)) System.Diagnostics.Trace.WriteLine(ex.Message, catString); if (!string.IsNullOrEmpty(ex.Source)) System.Diagnostics.Trace.WriteLine(ex.Source, catString); if (!string.IsNullOrEmpty(ex.StackTrace)) System.Diagnostics.Trace.WriteLine(ex.StackTrace, catString); if (ex.InnerException != null) { System.Diagnostics.Trace.WriteLine(string.Format("Inner Exception: {0}", ex.InnerException.GetType().Name), catString); if (!string.IsNullOrEmpty(ex.InnerException.Message)) System.Diagnostics.Trace.WriteLine(ex.InnerException.Message, catString); if (!string.IsNullOrEmpty(ex.InnerException.Source)) System.Diagnostics.Trace.WriteLine(ex.InnerException.Source, catString); if (!string.IsNullOrEmpty(ex.InnerException.StackTrace)) System.Diagnostics.Trace.WriteLine(ex.InnerException.StackTrace, catString); } #endregion #region Log to Event log if (EventLog.SourceExists(NovaDiagnosticAreaName)) { StringWriter sw = new StringWriter(); sw.WriteLine(string.Format("{0}: exception: {1}", msg, ex.GetType().Name)); if (!string.IsNullOrEmpty(ex.Message)) sw.WriteLine(ex.Message); if (!string.IsNullOrEmpty(ex.Source)) sw.WriteLine(ex.Source); if (!string.IsNullOrEmpty(ex.StackTrace)) sw.WriteLine(ex.StackTrace); EventLog.WriteEntry(NovaDiagnosticAreaName, sw.ToString()); } if (ex.InnerException != null) { var exc = ex.InnerException; StringWriter sw = new StringWriter(); sw.WriteLine(string.Format("{0}: exception: {1}", msg, exc.GetType().Name)); if (!string.IsNullOrEmpty(ex.Message)) sw.WriteLine(exc.Message); if (!string.IsNullOrEmpty(ex.Source)) sw.WriteLine(exc.Source); if (!string.IsNullOrEmpty(ex.StackTrace)) sw.WriteLine(exc.StackTrace); EventLog.WriteEntry(NovaDiagnosticAreaName, sw.ToString()); } #endregion } catch { } } #region Utils [MethodImpl(MethodImplOptions.NoInlining)] public string GetCurrentMethod() { StackTrace st = new StackTrace(); StackFrame sf = st.GetFrame(1); return sf.GetMethod().Name; } [MethodImpl(MethodImplOptions.NoInlining)] public string GetCurrentClass() { StackTrace st = new StackTrace(); StackFrame sf = st.GetFrame(1); return sf.GetMethod().DeclaringType.Name; } #endregion } }