Exemplo n.º 1
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            //fix none!
            if (logLevel == LogLevel.None)
            {
                return;
            }

            //防止循环调用:相比在Reporter控制,这里更提升效率
            if (RemoteIgnoreLoggers.Instance.ShouldIgnore(Category))
            {
                //防止循环调用
                return;
            }

            var reporter = LogReporter.Instance;

            if (!reporter.ShouldReport())
            {
                return;
            }

            var category      = Category ?? this.GetType().FullName;
            var msg           = $"[{logLevel}] {formatter(state, exception)}";
            var reportLogArgs = ReportLogArgs.Create(category, msg, (int)logLevel);

            reportLogArgs.ClientId = ClientId;

            //立即返回,不等待
#pragma warning disable 4014
            reporter.ReportLog(reportLogArgs);
#pragma warning restore 4014
        }