Exemple #1
0
        public void CallSiteShouldWorkEvenInlined()
        {
            var  logEvent    = new LogEventInfo(LogLevel.Error, "logger1", "message1");
            Type loggerType  = typeof(Logger);
            var  stacktrace  = StackTraceUsageUtils.GetWriteStackTrace(loggerType);
            var  stackFrames = stacktrace.GetFrames();
            var  index       = LoggerImpl.FindCallingMethodOnStackTrace(stackFrames, loggerType) ?? 0;
            int? indexLegacy = LoggerImpl.SkipToUserStackFrameLegacy(stackFrames, index);

            logEvent.GetCallSiteInformationInternal().SetStackTrace(stacktrace, index, indexLegacy);
            Layout l        = "${callsite}";
            var    callSite = l.Render(logEvent);

            Assert.Equal("NLog.UnitTests.LayoutRenderers.CallSiteTests.CallSiteShouldWorkEvenInlined", callSite);
        }
Exemple #2
0
        public async Task <string> GetAsyncCallSite()
        {
            var logEvent = new LogEventInfo(LogLevel.Error, "logger1", "message1");

#if !NETSTANDARD1_5
            Type loggerType  = typeof(Logger);
            var  stacktrace  = StackTraceUsageUtils.GetWriteStackTrace(loggerType);
            var  stackFrames = stacktrace.GetFrames();
            var  index       = LoggerImpl.FindCallingMethodOnStackTrace(stackFrames, loggerType) ?? 0;
            int? indexLegacy = LoggerImpl.SkipToUserStackFrameLegacy(stackFrames, index);
            logEvent.GetCallSiteInformationInternal().SetStackTrace(stacktrace, index, indexLegacy);
#endif
            await Task.Delay(0);

            Layout l        = "${callsite}";
            var    callSite = l.Render(logEvent);
            return(callSite);
        }
    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)
        {
            var stackTrace           = new StackTrace(StackTraceSkipMethods, stu == StackTraceUsage.WithSource);
            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);
        }
        // ...
    }