private static void CaptureCallSiteInfo(LogFactory factory, Type loggerType, LogEventInfo logEvent, StackTraceUsage stackTraceUsage) { try { #if NETSTANDARD1_5 var stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { stackTraceUsage == StackTraceUsage.WithSource }); #elif !SILVERLIGHT var stackTrace = new StackTrace(StackTraceSkipMethods, stackTraceUsage == StackTraceUsage.WithSource); #else var stackTrace = new StackTrace(); #endif var stackFrames = stackTrace.GetFrames(); int?firstUserFrame = FindCallingMethodOnStackTrace(stackFrames, loggerType); int?firstLegacyUserFrame = firstUserFrame.HasValue ? SkipToUserStackFrameLegacy(stackFrames, firstUserFrame.Value) : (int?)null; logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, firstUserFrame ?? 0, firstLegacyUserFrame); } catch (Exception ex) { if (factory.ThrowExceptions || ex.MustBeRethrownImmediately()) { throw; } InternalLogger.Error(ex, "Failed to capture CallSite for Logger {0}. Platform might not support ${{callsite}}", logEvent.LoggerName); } }
internal static void Write([NotNull] Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, LogFactory factory) { if (targets == null) { return; } #if !NETSTANDARD1_0 || NETSTANDARD1_5 StackTraceUsage stu = targets.GetStackTraceUsage(); if (stu != StackTraceUsage.None && !logEvent.HasStackTrace) { #if NETSTANDARD1_5 var stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { stu == StackTraceUsage.WithSource }); #elif !SILVERLIGHT var stackTrace = new StackTrace(StackTraceSkipMethods, stu == StackTraceUsage.WithSource); #else var stackTrace = new StackTrace(); #endif var stackFrames = stackTrace.GetFrames(); int?firstUserFrame = FindCallingMethodOnStackTrace(stackFrames, loggerType); int?firstLegacyUserFrame = firstUserFrame.HasValue ? SkipToUserStackFrameLegacy(stackFrames, firstUserFrame.Value) : (int?)null; logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, firstUserFrame ?? 0, firstLegacyUserFrame); } #endif AsyncContinuation exceptionHandler = (ex) => { }; if (factory.ThrowExceptions) { int originalThreadId = AsyncHelpers.GetManagedThreadId(); exceptionHandler = ex => { if (ex != null && AsyncHelpers.GetManagedThreadId() == originalThreadId) { throw new NLogRuntimeException("Exception occurred in NLog", ex); } }; } if (targets.NextInChain == null && logEvent.CanLogEventDeferMessageFormat()) { // Change MessageFormatter so it writes directly to StringBuilder without string-allocation logEvent.MessageFormatter = LogMessageTemplateFormatter.DefaultAutoSingleTarget.MessageFormatter; } IList <Filter> prevFilterChain = null; FilterResult prevFilterResult = FilterResult.Neutral; for (var t = targets; t != null; t = t.NextInChain) { FilterResult result = ReferenceEquals(prevFilterChain, t.FilterChain) ? prevFilterResult : GetFilterResult(t.FilterChain, logEvent); if (!WriteToTargetWithFilterChain(t.Target, result, logEvent, exceptionHandler)) { break; } prevFilterResult = result; // Cache the result, and reuse it for the next target, if it comes from the same logging-rule prevFilterChain = t.FilterChain; } }
internal static void Write([NotNull] Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, LogFactory factory) { if (targets == null) { return; } #if !NETSTANDARD1_0 || NETSTANDARD1_5 StackTraceUsage stu = targets.GetStackTraceUsage(); if (stu != StackTraceUsage.None && !logEvent.HasStackTrace) { #if NETSTANDARD1_5 var stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { stu == StackTraceUsage.WithSource }); #elif !SILVERLIGHT var stackTrace = new StackTrace(StackTraceSkipMethods, stu == StackTraceUsage.WithSource); #else var stackTrace = new StackTrace(); #endif var stackFrames = stackTrace.GetFrames(); int?firstUserFrame = FindCallingMethodOnStackTrace(stackFrames, loggerType); int?firstLegacyUserFrame = firstUserFrame.HasValue ? SkipToUserStackFrameLegacy(stackFrames, firstUserFrame.Value) : (int?)null; logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, firstUserFrame ?? 0, firstLegacyUserFrame); } #endif AsyncContinuation exceptionHandler = (ex) => { }; if (factory.ThrowExceptions) { int originalThreadId = AsyncHelpers.GetManagedThreadId(); exceptionHandler = ex => { if (ex != null && AsyncHelpers.GetManagedThreadId() == originalThreadId) { throw new NLogRuntimeException("Exception occurred in NLog", ex); } }; } if (targets.NextInChain == null && logEvent.Parameters != null && logEvent.Parameters.Length > 0 && logEvent.Message?.Length < 256 && ReferenceEquals(logEvent.MessageFormatter, LogMessageTemplateFormatter.DefaultAuto.MessageFormatter)) { logEvent.MessageFormatter = LogMessageTemplateFormatter.DefaultAutoSingleTarget.MessageFormatter; } for (var t = targets; t != null; t = t.NextInChain) { if (!WriteToTargetWithFilterChain(t, logEvent, exceptionHandler)) { break; } } }
internal static void Write([NotNull] Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, LogFactory factory) { if (targets == null) { return; } StackTraceUsage stu = targets.GetStackTraceUsage(); if (stu != StackTraceUsage.None && !logEvent.HasStackTrace) { StackTrace stackTrace; #if WINDOWS_UWP stackTrace = null; #elif NETSTANDARD1_5 stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { stu == StackTraceUsage.WithSource }); #elif !SILVERLIGHT stackTrace = new StackTrace(StackTraceSkipMethods, stu == StackTraceUsage.WithSource); #else stackTrace = new StackTrace(); #endif if (stackTrace != null) { var stackFrames = stackTrace.GetFrames(); int?firstUserFrame = FindCallingMethodOnStackTrace(stackFrames, loggerType); int?firstLegacyUserFrame = firstUserFrame.HasValue ? SkipToUserStackFrameLegacy(stackFrames, firstUserFrame.Value) : (int?)null; logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, firstUserFrame ?? 0, firstLegacyUserFrame); } } AsyncContinuation exceptionHandler = (ex) => { }; if (factory.ThrowExceptions) { int originalThreadId = AsyncHelpers.GetManagedThreadId(); exceptionHandler = ex => { if (ex != null) { if (AsyncHelpers.GetManagedThreadId() == originalThreadId) { throw new NLogRuntimeException("Exception occurred in NLog", ex); } } }; } for (var t = targets; t != null; t = t.NextInChain) { if (!WriteToTargetWithFilterChain(t, logEvent, exceptionHandler)) { break; } } }
private static void CaptureCallSiteInfo(LogFactory logFactory, Type loggerType, LogEventInfo logEvent, StackTraceUsage stackTraceUsage) { try { bool includeSource = (stackTraceUsage & StackTraceUsage.WithFileNameAndLineNumber) != 0; #if NETSTANDARD1_5 var stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { includeSource }); #else var stackTrace = new StackTrace(StackTraceSkipMethods, includeSource); #endif logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, null, loggerType); } catch (Exception ex) { if (logFactory.ThrowExceptions || ex.MustBeRethrownImmediately()) { throw; } InternalLogger.Error(ex, "Failed to capture CallSite for Logger {0}. Platform might not support ${{callsite}}", logEvent.LoggerName); } }
internal static void Write([NotNull] Type loggerType, TargetWithFilterChain targets, LogEventInfo logEvent, bool throwsExceptions) { if (targets == null) { return; } StackTraceUsage stu = targets.GetStackTraceUsage(); if (stu != StackTraceUsage.None && !logEvent.HasStackTrace) { StackTrace stackTrace; #if NETSTANDARD1_5 stackTrace = (StackTrace)Activator.CreateInstance(typeof(StackTrace), new object[] { stu == StackTraceUsage.WithSource }); #elif NETSTANDARD1_0 stackTrace = null; #elif !SILVERLIGHT stackTrace = new StackTrace(StackTraceSkipMethods, stu == StackTraceUsage.WithSource); #else stackTrace = new StackTrace(); #endif if (stackTrace != null) { var stackFrames = stackTrace.GetFrames(); int?firstUserFrame = FindCallingMethodOnStackTrace(stackFrames, loggerType); int?firstLegacyUserFrame = firstUserFrame.HasValue ? SkipToUserStackFrameLegacy(stackFrames, firstUserFrame.Value) : (int?)null; logEvent.GetCallSiteInformationInternal().SetStackTrace(stackTrace, firstUserFrame ?? 0, firstLegacyUserFrame); } } AsyncContinuation exceptionHandler = (ex) => { }; if (throwsExceptions) { int originalThreadId = AsyncHelpers.GetManagedThreadId(); exceptionHandler = ex => { if (ex != null) { if (AsyncHelpers.GetManagedThreadId() == originalThreadId) { throw new NLogRuntimeException("Exception occurred in NLog", ex); } } }; } if (targets.NextInChain == null && logEvent.Parameters != null && logEvent.Parameters.Length > 0 && logEvent.Message?.Length < 128 && ReferenceEquals(logEvent.MessageFormatter, LogEventInfo.DefaultMessageFormatter)) { // Signal MessageLayoutRenderer to skip string allocation of LogEventInfo.FormattedMessage if (!ReferenceEquals(logEvent.MessageFormatter, LogEventInfo.StringFormatMessageFormatter)) { logEvent.MessageFormatter = LogEventInfo.DefaultMessageFormatterSingleTarget; } } for (var t = targets; t != null; t = t.NextInChain) { if (!WriteToTargetWithFilterChain(t, logEvent, exceptionHandler)) { break; } } }