/// <summary>
        /// 获取日志消息
        /// </summary>
        /// <param name="content">日志内容</param>
        private string GetMessage(ILogContent content)
        {
            var caption = content as ICaption;

            if (caption != null && string.IsNullOrWhiteSpace(caption.Caption) == false)
            {
                return(caption.Caption);
            }
            if (content.Content.Length > 0)
            {
                return(content.Content.ToString());
            }
            return(content.TraceId);
        }
Example #2
0
        /// <summary>
        /// 创建事件生成器
        /// </summary>
        private el.EventBuilder CreateBuilder(LogLevel level, ILogContent content)
        {
            if (content.Exception != null && (level == LogLevel.Error || level == LogLevel.Critical))
            {
                return(_client.CreateException(content.Exception));
            }
            var builder = _client.CreateLog(GetMessage(content), ConvertTo(level));

            if (content.Exception != null && level == LogLevel.Warning)
            {
                builder.SetException(content.Exception);
            }
            return(builder);
        }
Example #3
0
        public string Format(ILogContent content)
        {
            if (content is ILogText text)
            {
                return(text.Text);
            }

            if (content is ILogMessage message)
            {
                return(FormatLogMessage(message));
            }

            throw new NotImplementedException($"The default formatter is not yet implemented for log content of type {content.GetType()}!");
        }
Example #4
0
 /// <summary>
 /// 追加内容
 /// </summary>
 public static void Append(this ILogContent content, StringBuilder result, string value, params object[] args)
 {
     if (string.IsNullOrWhiteSpace(value))
     {
         return;
     }
     result.Append("   ");
     if (args == null || args.Length == 0)
     {
         result.Append(value);
         return;
     }
     result.AppendFormat(value, args);
 }
 /// <summary>
 /// 添加扩展属性集合
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志转换器</param>
 private void AddExtraProperties(EventBuilder builder, ILogContent content)
 {
     if (content == null)
     {
         return;
     }
     foreach (var parameter in content.ExtraProperties)
     {
         if (string.IsNullOrWhiteSpace(parameter.Value.SafeString()))
         {
             continue;
         }
         builder.SetProperty(parameter.Key, parameter.Value);
     }
 }
        public void Notify(ILogContent content)
        {
            switch (content)
            {
            case ILogText text:
                AppendLogText(text);
                break;

            case ILogMessage message:
                AppendLogMessage(message);
                break;

            default:
                throw new NotImplementedException($"The log window is not yet implemented for log content of type {content.GetType()}!");
            }
        }
Example #7
0
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="level">日志等级</param>
        /// <param name="content">日志内容</param>
        public void WriteLog(LogLevel level, ILogContent content)
        {
            var provider      = GetFormatProvider();
            var logEventLevel = ConvertTo(level);

            if (logEventLevel == null)
            {
                return;
            }
            if (provider == null)
            {
                throw new NullReferenceException("日志格式化提供程序不可为空");
            }
            var message = provider.Format("", content, null);

            _logger.Write(logEventLevel.SafeValue(), message);
        }
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="level">平台日志等级</param>
        /// <param name="content">日志内容</param>
        public void WriteLog(LogLevel level, ILogContent content)
        {
            var builder = CreateBuilder(level, content);

            // 致命错误
            if (level == LogLevel.Fatal || level == LogLevel.Error)
            {
                builder.MarkAsCritical();
            }
            SetUser(content);
            SetSource(builder, content);
            SetReferenceId(builder, content);
            SetException(builder, content);
            AddProperties(builder, content as ILogConvert);
            AddExtraProperties(builder, content);
            AddTags(builder, content);

            builder.Submit();
        }
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="level">平台日志等级</param>
        /// <param name="content">日志内容</param>
        public void WriteLog(LogLevel level, ILogContent content)
        {
            var builder = CreateBuilder(level, content);

            // 致命错误
            if (level == LogLevel.Fatal || level == LogLevel.Error)
            {
                builder.MarkAsCritical();
            }
            Debug.WriteLine($"【Exceptionless】Thread: {content.ThreadId}, LogId: {content.LogId}, TraceId: {content.TraceId}, Message: {GetMessage(content)}, Tags: [{content.Tags.ExpandAndToString()}]");
            SetUser(content);
            SetSource(builder, content);
            SetReferenceId(builder, content);
            SetException(builder, content);
            AddProperties(builder, content as ILogConvert);
            AddExtraProperties(builder, content);
            AddTags(builder, content);

            builder.Submit();
        }
Example #10
0
 /// <summary>
 /// 设置跟踪号
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志内容</param>
 private void SetReferenceId(EventBuilder builder, ILogContent content)
 {
     builder.SetReferenceId($"{content.TraceId}-{content.Order}");
 }
 /// <summary>
 /// 设置内容并换行
 /// </summary>
 /// <param name="content">日志内容</param>
 /// <param name="value">值</param>
 /// <param name="args">变量值</param>
 public static void Content(this ILogContent content, string value, params object[] args)
 {
     content.AppendLine(content.Content, value, args);
 }
 /// <summary>
 /// 追加内容并换行
 /// </summary>
 public static void AppendLine(this ILogContent content, StringBuilder result, string value, params object[] args)
 {
     content.Append(result, value, args);
     result.AppendLine();
 }
Example #13
0
 public void Notify(ILogContent content)
 {
     logContent.Enqueue(content);
 }
Example #14
0
 /// <summary>
 ///     设置跟踪号
 /// </summary>
 private void SetReferenceId(EventBuilder builder, ILogContent content)
 {
     builder.SetReferenceId(content.TraceId);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="content"></param>
 /// <param name="value"></param>
 public static void Content(this ILogContent content, string value)
 {
     content.AppendLine(content.Content, value);
 }
Example #16
0
 /// <summary>
 /// 设置来源
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志内容</param>
 private void SetSource(EventBuilder builder, ILogContent content)
 {
     if (string.IsNullOrWhiteSpace(content.Url))
         return;
     builder.SetSource(content.Url);
 }
 /// <summary>
 /// 添加扩展属性
 /// </summary>
 /// <param name="content">日志内容</param>
 /// <param name="name">名称</param>
 /// <param name="value">值</param>
 public static void AddExtraProperty(this ILogContent content, string name, object value) => content.ExtraProperties[name] = value;
Example #18
0
 /// <summary>
 /// 添加标签
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志内容</param>
 private void AddTags(EventBuilder builder, ILogContent content) => builder.AddTags(content.Level, content.LogName, content.TraceId);
Example #19
0
 /// <summary>
 /// 格式化
 /// </summary>
 /// <param name="content">日志内容</param>
 public string Format(ILogContent content)
 {
     return(string.Empty);
 }
 /// <summary>
 /// 设置跟踪号
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志内容</param>
 private void SetReferenceId(EventBuilder builder, ILogContent content) => builder.SetReferenceId($"{content.LogId}");
 /// <summary>
 /// 追加内容
 /// </summary>
 public static void Append( this ILogContent content, StringBuilder result, string value ) {
     if( string.IsNullOrWhiteSpace( value ) )
         return;
     result.Append( value );
 }
Example #22
0
 /// <summary>
 /// 添加标签
 /// </summary>
 /// <param name="builder">事件生成器</param>
 /// <param name="content">日志内容</param>
 private void AddTags(EventBuilder builder, ILogContent content)
 {
     builder.AddTags(content.Level, content.LogName, content.TraceId);
     if (content.Tags.Any())
         builder.AddTags(content.Tags.ToArray());
 }
Example #23
0
 /// <summary>
 /// 写日志
 /// </summary>
 /// <param name="level">日志等级</param>
 /// <param name="content">日志内容</param>
 public void WriteLog(LogLevel level, ILogContent content)
 {
 }
 /// <summary>
 ///
 /// </summary>
 public static void AppendLine(this ILogContent content, StringBuilder result, string value)
 {
     content.Append(result, value);
     result.AppendLine();
 }
Example #25
0
        /// <summary>
        /// 获取内容
        /// </summary>
        /// <typeparam name="T">日志内容类型</typeparam>
        /// <returns></returns>
        public T Get <T>() where T : ILogContent
        {
            ILogContent content = LogContent;

            return((T)content);
        }
Example #26
0
 /// <summary>
 /// 设置用户信息
 /// </summary>
 /// <param name="content">日志内容</param>
 private void SetUser(ILogContent content)
 {
     if (string.IsNullOrWhiteSpace(content.UserId))
         return;
     _client.Configuration.SetUserIdentity(content.UserId);
 }
Example #27
0
 /// <summary>
 /// 格式化
 /// </summary>
 /// <param name="content">日志内容</param>
 /// <returns></returns>
 public string Format(ILogContent content)
 {
     return("");
 }
Example #28
0
 /// <summary>
 /// 格式化
 /// </summary>
 /// <param name="content">日志内容</param>
 public string Format(ILogContent content) => "";