2017-05-09 3 views
0

나는이 문장과 ASPNET 핵심 응용 프로그램과 활성화 로그 구축 :. 이제Azure 진단 로그의 로그 수준을 어떻게 제어합니까?

loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug((category, logLevel) => (category.Contains("WEBAPI") && logLevel >= LogLevel.Trace)); 
    loggerFactory.AddAzureWebAppDiagnostics(); 

을 문제를 푸른 로그 내가 관심이없는 오전 Mircosoft 패키지에서 오는 다른 로그 세부 사항을 많이 가지고 있다는 것입니다 I을 콘솔 로깅과 마찬가지로 Azure에 로깅 구성을 전달할 수 없습니다.

진단 시스템을 어떻게 사용해야합니까?

+1

포털에 설정된 로그 세부 사항은 무엇입니까? 예를 들어 레벨을 다음과 같이 설정할 수 있습니다. 경고. – juunas

+0

@juunas Verbose로 설정되었으므로 레벨 BY 범주를 어떻게 제어해야합니까? 그것이 내가 알 수없는 것입니다. –

답변

1

Azure 포털에서 응용 프로그램 진단을 활성화하면 Level을 선택할 수도 있습니다. 이 설정을 사용하면 캡처 된 정보를 정보, 경고 또는 오류 정보로 필터링 할 수 있습니다.

enter image description here

용장 레벨 로그 시스템 어플리케이션에 의해 생성 된 모든 로그 정보를 의미한다.

이제 문제는 푸른 로그 내가 관심이없는 오전 Mircosoft 패키지에서 오는 다른 로그 세부 사항을 많이 가지고 있다는 것입니다.

당신은 로그를 필터링 푸른 포털 수준을 변경할 수 있습니다 당신이 저장하기를 원합니다. 언제든지 Azure 포털의 레벨을 변경할 수 있습니다. web.config 파일을 변경하는 것과 달리 진단 로그 수준을 변경해도 응용 프로그램이 실행되는 응용 프로그램 도메인은 재생되지 않습니다.

광산이 아닌 범주에서 로그를 제외하고 싶습니다. 설정과 함께 내 첫 번째 줄에 행을 그냥 씁니다.

Azure Web App 로깅 확장 프로그램은 범주별로 필터 로그를 지원하지 않습니다. 이 기능을 구현하기 위해 새 로거 제공을 만들 수 있습니다.

끝내려면 3 단계가 있습니다.

1 단계 : ILogger 인터페이스를 구현해야하는 CustomLogger 클래스를 추가하십시오. 이 수업에서는 레벨 및 카테고리별로 로그를 필터링하고 원하는 위치에 로그 메시지를 저장할 수 있습니다.

public class CustomLogger : ILogger 
{ 

    private string _categoryName; 

    private Func<string, LogLevel, bool> _filter; 

    public CustomLogger(string categoryName, Func<string, LogLevel, bool> filter) 
    { 
     _categoryName = categoryName; 
     _filter = filter; 
    } 


    public IDisposable BeginScope<TState>(TState state) 
    { 
     return null; 
    } 

    public bool IsEnabled(LogLevel logLevel) 
    { 
     return (_filter == null || _filter(_categoryName, logLevel)); 
    } 

    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) 
    { 

     if (!IsEnabled(logLevel)) 
     { 
      return; 
     } 

     if (formatter == null) 
     { 
      throw new ArgumentNullException(nameof(formatter)); 
     } 

     var message = formatter(state, exception); 

     if (string.IsNullOrEmpty(message)) 
     { 
      return; 
     } 

     message = [email protected]"Level: {logLevel} {message}"; 

     if (exception != null) 
     { 
      message += Environment.NewLine + Environment.NewLine + exception.ToString(); 
     } 

     //save message to any place you wanted 
    } 
} 

2 단계 : ILoggerProvider 인터페이스를 구현할 필요가 CustomLoggerProvider 클래스를 추가합니다. 이 클래스에서는 CustomerLogger의 인스턴스를 만들어 정보를 기록합니다.

public class CustomLoggerProvider : ILoggerProvider 
{ 
    private readonly Func<string, LogLevel, bool> _filter; 

    public CustomLoggerProvider(Func<string, LogLevel, bool> filter) 
    { 
     _filter = filter; 
    } 

    public ILogger CreateLogger(string categoryName) 
    { 
     return new CustomLogger(categoryName, _filter); 
    } 

    public void Dispose() 
    { 

    } 
} 

3 단계 : 로거 공장에 CustomLoggerProvider 인스턴스를 추가하는 데 사용됩니다 CustomLoggerExtensions 클래스를 추가합니다.

public static class CustomLoggerExtensions 
{ 
    public static ILoggerFactory AddCustom(this ILoggerFactory factory, 
              Func<string, LogLevel, bool> filter = null) 
    { 
     factory.AddProvider(new CustomLoggerProvider(filter)); 
     return factory; 
    } 
} 

위 단계를 거친 후 다음 코드를 사용하여이 사용자 정의 로거를 사용할 수 있습니다.

loggerFactory.AddCustom((category, logLevel) => (category.Contains("WEBAPI") && logLevel >= LogLevel.Trace)); 
+0

이것은 훌륭한 정보입니다! 하지만 내가 정말로 의미하는 것은 범주에 기반하여 필터링하고 싶습니다 ... 광산이 아닌 범주에서 로그를 제외하고 싶습니다. 설정과 함께 내 질문의 첫 줄에 그냥 입력하십시오. –

+0

질문에 대한 오해로 인해 유감입니다. 귀하의 의견에 따라 답장을 업데이트했습니다. – Amor

+0

와우! 이제 그 대답입니다! 정말 고마워. –

관련 문제