Skip to content

Commit

Permalink
合并
Browse files Browse the repository at this point in the history
  • Loading branch information
xi3892 committed Jul 25, 2020
2 parents 3d7d3c6 + 9acebb6 commit 4e465cd
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 144 deletions.
71 changes: 0 additions & 71 deletions NewLife.Core/Log/DiagnosticListenerObserver.cs

This file was deleted.

31 changes: 23 additions & 8 deletions NewLife.Core/Log/ISpan.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.Specialized;
using System.Linq;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using NewLife.Data;
Expand Down Expand Up @@ -49,7 +50,7 @@ public class DefaultSpan : ISpan
{
#region 属性
/// <summary>构建器</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
public ISpanBuilder Builder { get; }

/// <summary>唯一标识。随线程上下文、Http、Rpc传递,作为内部片段的父级</summary>
Expand All @@ -73,11 +74,19 @@ public class DefaultSpan : ISpan
/// <summary>错误信息</summary>
public String Error { get; set; }

#if NET40 || NET45
#if NET40
[ThreadStatic]
private static ISpan _Current;
/// <summary>当前线程正在使用的上下文</summary>
public static ISpan Current { get => _Current; set => _Current = value; }
#elif NET45
private static readonly String FieldKey = typeof(DefaultSpan).FullName;
/// <summary>当前线程正在使用的上下文</summary>
public static ISpan Current
{
get => ((System.Runtime.Remoting.ObjectHandle)System.Runtime.Remoting.Messaging.CallContext.LogicalGetData(FieldKey))?.Unwrap() as ISpan;
set => System.Runtime.Remoting.Messaging.CallContext.LogicalSetData(FieldKey, new System.Runtime.Remoting.ObjectHandle(value));
}
#else
private static readonly System.Threading.AsyncLocal<ISpan> _Current = new System.Threading.AsyncLocal<ISpan>();
/// <summary>当前线程正在使用的上下文</summary>
Expand All @@ -90,6 +99,9 @@ public class DefaultSpan : ISpan
#endregion

#region 构造
/// <summary>实例化</summary>
public DefaultSpan() { }

/// <summary>实例化</summary>
/// <param name="builder"></param>
public DefaultSpan(ISpanBuilder builder)
Expand All @@ -104,7 +116,7 @@ public DefaultSpan(ISpanBuilder builder)

#region 方法
/// <summary>设置跟踪标识</summary>
public void Start()
public virtual void Start()
{
if (Id.IsNullOrEmpty()) Id = Rand.NextBytes(8).ToHex().ToLower();

Expand All @@ -126,7 +138,7 @@ public void Start()
}

/// <summary>完成跟踪</summary>
private void Finish()
protected virtual void Finish()
{
if (_finished) return;
_finished = true;
Expand All @@ -142,7 +154,7 @@ private void Finish()
/// <summary>设置错误信息</summary>
/// <param name="ex">异常</param>
/// <param name="tag">标签</param>
public void SetError(Exception ex, Object tag)
public virtual void SetError(Exception ex, Object tag)
{
Error = ex?.GetMessage();
if (tag is String str)
Expand Down Expand Up @@ -221,10 +233,11 @@ public static void Detach(this ISpan span, NameValueCollection headers)
}
else if (headers.AllKeys.Contains("Request-Id"))
{
// HierarchicalId编码取最后一段作为父级
var tid = headers["Request-Id"];
var ss = (tid + "").Split(".", "_");
if (ss.Length > 0) span.TraceId = ss[0].TrimStart('|');
if (ss.Length > 1) span.ParentId = ss[1];
if (ss.Length > 1) span.ParentId = ss[ss.Length - 1];
}
}

Expand All @@ -243,9 +256,10 @@ public static void Detach(this ISpan span, IDictionary<String, Object> parameter
}
else if (parameters.TryGetValue("Request-Id", out tid))
{
// HierarchicalId编码取最后一段作为父级
var ss = (tid + "").Split(".", "_");
if (ss.Length > 0) span.TraceId = ss[0].TrimStart('|');
if (ss.Length > 1) span.ParentId = ss[1];
if (ss.Length > 1) span.ParentId = ss[ss.Length - 1];
}
}

Expand All @@ -264,9 +278,10 @@ public static void Detach<T>(this ISpan span, IDictionary<String, T> parameters)
}
else if (parameters.TryGetValue("Request-Id", out tid))
{
// HierarchicalId编码取最后一段作为父级
var ss = (tid + "").Split(".", "_");
if (ss.Length > 0) span.TraceId = ss[0].TrimStart('|');
if (ss.Length > 1) span.ParentId = ss[1];
if (ss.Length > 1) span.ParentId = ss[ss.Length - 1];
}
}
#endregion
Expand Down
14 changes: 9 additions & 5 deletions NewLife.Core/Log/ISpanBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Threading;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
Expand Down Expand Up @@ -60,7 +61,7 @@ public class DefaultSpanBuilder : ISpanBuilder
{
#region 属性
/// <summary>跟踪器</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
public ITracer Tracer { get; }

/// <summary>操作名</summary>
Expand All @@ -74,15 +75,15 @@ public class DefaultSpanBuilder : ISpanBuilder

private Int32 _Total;
/// <summary>采样总数</summary>
public Int32 Total => _Total;
public Int32 Total { get => _Total; private set => _Total = value; }

private Int32 _Errors;
/// <summary>错误次数</summary>
public Int32 Errors => _Errors;
public Int32 Errors { get => _Errors; private set => _Errors = value; }

private Int64 _Cost;
/// <summary>总耗时。所有请求耗时累加,单位ms</summary>
public Int64 Cost => _Cost;
public Int64 Cost { get => _Cost; private set => _Cost = value; }

/// <summary>最大耗时。单位ms</summary>
public Int32 MaxCost { get; private set; }
Expand All @@ -97,7 +98,10 @@ public class DefaultSpanBuilder : ISpanBuilder
public IList<ISpan> ErrorSamples { get; private set; }
#endregion

#region 构造
#region
/// <summary>实例化</summary>
public DefaultSpanBuilder() { }

/// <summary>实例化</summary>
/// <param name="tracer"></param>
/// <param name="name"></param>
Expand Down
22 changes: 18 additions & 4 deletions NewLife.Core/Log/ITracer.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Threading;
using NewLife.Http;
using NewLife.Model;
using NewLife.Threading;

namespace NewLife.Log
Expand Down Expand Up @@ -48,6 +48,15 @@ public class DefaultTracer : DisposeBase, ITracer
#region 静态
/// <summary>全局实例。默认每15秒采样一次</summary>
public static ITracer Instance { get; set; } = new DefaultTracer { Log = XTrace.Log };

static DefaultTracer()
{
// 注册默认类型,便于Json反序列化时为接口属性创造实例
var ioc = ObjectContainer.Current;
ioc.AddTransient<ITracer, DefaultTracer>();
ioc.AddTransient<ISpanBuilder, DefaultSpanBuilder>();
ioc.AddTransient<ISpan, DefaultSpan>();
}
#endregion

#region 属性
Expand Down Expand Up @@ -105,7 +114,7 @@ private void DoProcessSpans()
if (builders != null && builders.Length > 0)
{
// 等待未完成Span的时间,默认1000ms
Thread.Sleep(WaitForFinish);
if (WaitForFinish > 0) Thread.Sleep(WaitForFinish);

ProcessSpans(builders);
}
Expand Down Expand Up @@ -151,9 +160,14 @@ public virtual ISpanBuilder BuildSpan(String name)
var p = name.IndexOf('?');
if (p > 0) name = name.Substring(0, p);

return _builders.GetOrAdd(name, k => new DefaultSpanBuilder(this, k));
return _builders.GetOrAdd(name, k => OnBuildSpan(k));
}

/// <summary>实例化Span构建器</summary>
/// <param name="name"></param>
/// <returns></returns>
protected virtual ISpanBuilder OnBuildSpan(String name) => new DefaultSpanBuilder(this, name);

/// <summary>开始一个Span</summary>
/// <param name="name">操作名</param>
/// <returns></returns>
Expand Down Expand Up @@ -202,7 +216,7 @@ public static class TracerExtension
public static HttpClient CreateHttpClient(this ITracer tracer, HttpMessageHandler handler = null)
{
if (handler == null) handler = new HttpClientHandler();

return new HttpClient(new HttpTraceHandler(handler) { Tracer = tracer });
}

Expand Down
7 changes: 2 additions & 5 deletions NewLife.Core/NewLife.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<Description>算法、日志、网络、RPC、序列化、缓存、线程池</Description>
<Company>新生命开发团队</Company>
<Copyright>©2002-2020 NewLife</Copyright>
<Version>8.8.2020.0724-beta</Version>
<FileVersion>8.8.2020.0724</FileVersion>
<Version>8.8.2020.0725-rc2</Version>
<FileVersion>8.8.2020.0725</FileVersion>
<AssemblyVersion>8.8.*</AssemblyVersion>
<Deterministic>false</Deterministic>
<OutputPath>..\..\Bin</OutputPath>
Expand Down Expand Up @@ -84,9 +84,6 @@
<Reference Include="System.Management" />
<PackageReference Include="System.Net.Http" Version="2.0.20710" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'net40'">
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.7.1" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Agent\**" />
<Compile Remove="Web\OAuth\**" />
Expand Down
2 changes: 1 addition & 1 deletion NewLife.Core/Serialization/Json/JsonReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ internal Object ParseObject(IDictionary<String, Object> dic, Type type, Object t
var ext = target as IExtend;

// 遍历所有可用于序列化的属性
var props = type.GetProperties(true).ToDictionary(e => SerialHelper.GetName(e), e => e);
var props = target.GetType().GetProperties(true).ToDictionary(e => SerialHelper.GetName(e), e => e);
foreach (var item in dic)
{
var v = item.Value;
Expand Down
4 changes: 2 additions & 2 deletions NewLife.WinCore/NewLife.WinCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
<Description>算法、日志、网络、RPC、序列化、缓存、Windows服务、线程池</Description>
<Company>新生命开发团队</Company>
<Copyright>©2002-2020 NewLife</Copyright>
<Version>8.8.2020.0701</Version>
<FileVersion>8.8.2020.0701</FileVersion>
<Version>8.8.2020.0725-rc</Version>
<FileVersion>8.8.2020.0725</FileVersion>
<AssemblyVersion>8.8.*</AssemblyVersion>
<Deterministic>false</Deterministic>
<OutputPath>..\..\Bin</OutputPath>
Expand Down
4 changes: 2 additions & 2 deletions XCode/XCode.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<Description>数据中间件,MySQL、SQLite、SqlServer、Oracle</Description>
<Company>新生命开发团队</Company>
<Copyright>©2002-2020 NewLife</Copyright>
<Version>9.18.2020.0719-beta</Version>
<FileVersion>9.18.2020.0719</FileVersion>
<Version>9.18.2020.0725-rc</Version>
<FileVersion>9.18.2020.0725</FileVersion>
<AssemblyVersion>9.18.*</AssemblyVersion>
<Deterministic>false</Deterministic>
<OutputPath>..\..\Bin</OutputPath>
Expand Down
Loading

0 comments on commit 4e465cd

Please sign in to comment.