private775 icon

C#: Custom SharePoint Logging Service

private775 | PRO | 02/05/16 06:25:16 PM UTC | 0 ⭐ | 606 👁️ | Never ⏰ | []
C# |

8.92 KB

|

None

|

0 👍

/

0 👎

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<SPDiagnosticsArea> ProvideAreas()
        {
            List<SPDiagnosticsArea> areas = new List<SPDiagnosticsArea>
                {
                    new SPDiagnosticsArea(NovaDiagnosticAreaName, new List<SPDiagnosticsCategory>
                    {
                        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
    }
}

Comments