가능한 한 모든 원격 측정 항목에 사용자 정의 데이터 필드를 추가하려고합니다.이 데이터는 단일 조작에서 일관되지만 조작마다 다릅니다. 나는 정의 ITelemetryInitializer이 있고, 그 안에 내가 좋아하는 뭔가를 할 수 있습니다Application Insights telemetry에 조작을위한 사용자 정의 데이터 추가하기
public class MyInitializer : ITelemetryInitializer
{
public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
{
telemetry.Context.Properties[ "platform" ] = "PC";
}
}
을하지만 나는이 초기화에이 데이터를 밀어 가정하고있어 이해가 안 돼요.
public class MyInitializer : ITelemetryInitializer
{
private string mPlatform = "unknown";
public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
{
telemetry.Context.Properties[ "platform" ] = mPlatform;
}
public void SetPlatform(string platform)
{
mPlatform = platform
}
}
그리고 컨트롤러 레벨에서 내가 이런 일을 수행합니다 :이 같은 것을 추가 한
foreach (var init in TelemetryConfiguration.Active.TelemetryInitializers)
{
var customInit = init as MyInitializer;
if (customInit != null)
{
customInit.SetPlatform(requestPlatform);
}
}
을하지만이 끔찍하게 투박하고, 오류가 발생하는 경향이다 (예 : 이 함수가 호출되기 전에 원격 측정 값이 전송되면), 그리고 이것이 thread-safe인지는 확실하지 않습니다.
이러한 종류의 데이터를 전달하기위한 의도 된 방법은 무엇입니까?
[Route("[controller]")]
public class MyController : Controller
{
private readonly TelemetryClient mTelemetryClient;
public MyController(
TelemetryClient TelemetryClientArg)
{
mTelemetryClient = TelemetryClientArg;
mTelemetryClient.Context.Properties.Remove("platform");
}
[HttpPost]
[Produces("application/json")]
public IActionResult Post([FromBody] RequestClass RequestData)
{
mTelemetryClient.TrackTrace("Test trace 1"); // doesn't have platform set
mTelemetryClient.Context.Properties["platform"] = RequestData.platform;
mTelemetryClient.TrackTrace("Test trace 2"); // has platform set correctly
}
}
이 컨트롤러 생성자를 호출 할 나타나는 안전 할 것 같다 : 내가 지금이 문제를 해결했다고 생각