어떻게 asp.net core 에 미들웨어 기록 인터페이스 시간 을 씁 니까?

Intro
인 터 페 이 스 를 쓰 는 사람 은 다른 사람 이 인터페이스 가 비교적 느 리 고 얼마나 느 린 지,한 인터페이스 서버 가 처리 하 는 데 얼마나 걸 렸 는 지,만약 에 구체 적 인 숫자 가 있어 서 모든 인터페이스 가 얼마나 걸 렸 는 지 기록 할 수 있다 면 다른 사람 이 인터페이스 가 느 릴 때 인터페이스 소모 시간 통 계 를 보고 몇 밀리초 만 에 처리 하면 이 솥 에 대해 나 는 외우 지 않 을 것 이다.
중간 부품 실현
asp.net core 의 실행 은 하나의 또 하나의 미들웨어 로 이 루어 집 니 다.따라서 우 리 는 자신의 미들웨어 만 정의 하고 요청 이 시작 되 기 전의 시간 과 처리 가 끝 난 후의 시간 을 기록 해 야 합 니 다.이 미들웨어 는 요청 한 시간 을 로그 에 출력 할 수 있 습 니 다.응답 헤드 나 다른 곳 으로 출력 해 야 합 니 다.

public static class PerformanceLogExtension
{
 public static IApplicationBuilder UsePerformanceLog(this IApplicationBuilder applicationBuilder)
 {
  applicationBuilder.Use(async (context, next) =>
   {
    var profiler = new StopwatchProfiler();
    profiler.Start();
    await next();
    profiler.Stop();

    var logger = context.RequestServices.GetService<ILoggerFactory>()
     .CreateLogger("PerformanceLog");
    logger.LogInformation("TraceId:{TraceId}, RequestMethod:{RequestMethod}, RequestPath:{RequestPath}, ElapsedMilliseconds:{ElapsedMilliseconds}, Response StatusCode: {StatusCode}",
          context.TraceIdentifier, context.Request.Method, context.Request.Path, profiler.ElapsedMilliseconds, context.Response.StatusCode);
   });
  return applicationBuilder;
 }
}
미들웨어 설정
Startup 에 요청 처리 파 이 프 를 설정 합 니 다.예제 설정 은 다음 과 같 습 니 다.

app.UsePerformanceLog();

app.UseAuthentication();
app.UseMvc(routes =>
 {
  // ...
 });
// ...
예시
로그 에서 Logger 이름 인"PerformanceLog"로 로 그 를 검색 합 니 다.로그 에 있 는 ElapsedMilliseconds 는 인터페이스 에 대응 하 는 시간 이 걸 리 거나 ElapsedMilliseconds 범위 에 따라 검색 할 수 있 습 니 다.예 를 들 어 1s 이상 걸 리 는 로 그 를 선택 하 는 것 입 니 다.

Memo
이 중간 부품 은 비교적 간단 하지만,단지 처리 사고방식 일 뿐이다.
대형 애플 리 케 이 션 은 비교적 전문 적 인 APM 도 구 를 사용 할 수 있 습 니 다.최근 에 인기 가 많은Skywalking프로젝트 는.NET Core 를 지원 합 니 다.상세 한 정 보 는 참고 하 세 요https://github.com/SkyAPM/SkyAPM-dotnet
Reference
https://github.com/WeihanLi/ActivityReservation
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기