• NLog WriteToTargets method


     public void Debug(Exception exception, [Localizable(false)] string message)
            {
                if (IsDebugEnabled)
                {
                    WriteToTargets(LogLevel.Debug, exception, message, null);
                }
            }

    https://github.com/NLog/NLog/blob/dev/src/NLog/Logger.cs#L599

    private void WriteToTargets(LogLevel level, Exception ex, [Localizable(false)] string message, object[] args)

     private void WriteToTargets(LogLevel level, Exception ex, [Localizable(false)] string message, object[] args)
            {
                var targetsForLevel = GetTargetsForLevel(level);
                if (targetsForLevel != null)
                {
                    var logEvent = LogEventInfo.Create(level, Name, ex, Factory.DefaultCultureInfo, message, args);
                    WriteToTargets(logEvent, targetsForLevel);
                }
            }
      private void WriteToTargets([NotNull] LogEventInfo logEvent, [NotNull] TargetWithFilterChain targetsForLevel)
            {
                LoggerImpl.Write(DefaultLoggerType, targetsForLevel, PrepareLogEventInfo(logEvent), Factory);
            }
      [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", Justification = "Using 'NLog' in message.")]
            internal static void Write([NotNull] Type loggerType, [NotNull] TargetWithFilterChain targetsForLevel, LogEventInfo logEvent, LogFactory logFactory)
            {
                logEvent.SetMessageFormatter(logFactory.ActiveMessageFormatter, targetsForLevel.NextInChain == null ? logFactory.SingleTargetMessageFormatter : null);
    
    #if CaptureCallSiteInfo
                StackTraceUsage stu = targetsForLevel.GetStackTraceUsage();
                if (stu != StackTraceUsage.None)
                {
                    bool attemptCallSiteOptimization = targetsForLevel.TryCallSiteClassNameOptimization(stu, logEvent);
                    if (attemptCallSiteOptimization && targetsForLevel.TryLookupCallSiteClassName(logEvent, out string callSiteClassName))
                    {
                        logEvent.CallSiteInformation.CallerClassName = callSiteClassName;
                    }
                    else if (attemptCallSiteOptimization || targetsForLevel.MustCaptureStackTrace(stu, logEvent))
                    {
                        CaptureCallSiteInfo(logFactory, loggerType, logEvent, stu);
    
                        if (attemptCallSiteOptimization)
                        {
                            targetsForLevel.TryRememberCallSiteClassName(logEvent);
                        }
                    }
                }
    #endif
    
                AsyncContinuation exceptionHandler = (ex) => { };
                if (logFactory.ThrowExceptions)
                {
                    int originalThreadId = AsyncHelpers.GetManagedThreadId();
                    exceptionHandler = ex =>
                    {
                        if (ex != null && AsyncHelpers.GetManagedThreadId() == originalThreadId)
                        {
                            throw new NLogRuntimeException("Exception occurred in NLog", ex);
                        }
                    };
                }
    
                IList<Filter> prevFilterChain = null;
                FilterResult prevFilterResult = FilterResult.Neutral;
                for (var t = targetsForLevel; t != null; t = t.NextInChain)
                {
                    FilterResult result = ReferenceEquals(prevFilterChain, t.FilterChain) ?
                        prevFilterResult : GetFilterResult(t.FilterChain, logEvent, t.DefaultResult);
                    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;
                }
            }
  • 相关阅读:
    FFMPEG音视频基础问题和被面试问到的东西
    OpenGL学习
    FFMPEG起航之旅
    SurfaceView、TextureView对比和学习
    对文件拷贝、删除操作、对时间的计算以及转化
    音视频开发
    企业级Android应用架构设计与开发
    屏幕分辨率的适配&&开发文档的介绍
    设计模式的学习
    自定义Dialog的模版
  • 原文地址:https://www.cnblogs.com/chucklu/p/13253598.html
Copyright © 2020-2023  润新知