2011-03-08 7 views
19

Azure 배포 응용 프로그램에서 간단한 로깅을 수행하는 가장 좋은 방법은 this일까요? Azure에 배포 된 .Net의 기본 로그인 방법

실제로 파일 등을 얻기 위해 많은 일 것 같은 느낌이 든다 경우

... 당신을 위해 가장 좋은 일 이죠

?

+1

[best-practices-for-logging-and-tracing-in-net] (http://programmers.stackexchange.com/questions/57064/best-practices-for-logging-and-tracing-in- net /) 프로그래머 .stackexchange도 유용합니다 – k3b

답변

8

우리는 Azure 테이블 스토리지에 기록하는 진단에서 빌드를 사용합니다. 언제든지 로그에 작성된 메시지가 필요할 때만이 메시지는 "Trace.WriteLine (...)"입니다.

로그가 Azure 테이블 저장소에 기록되므로 로그 메시지를 다운로드하고 테이블 저장소에서 로그를 제거하는 프로세스가 있습니다. 이것은 우리에게 유리하지만 아마 응용 프로그램에 달려 있다고 생각합니다.

http://msdn.microsoft.com/en-us/library/gg433048.aspx

는 희망이 도움이! Brosto의 대답에 약간의 추가

[업데이트]

public void GetLogs() { 
     int cnt = 0; 
     bool foundRows = false; 
     var entities = context.LogTable; 
     while (1 == 1) { 
      foreach (var en in entities) { 
       processLogRow(en); 
       context.DeleteObject(en); 
       cnt++; 
       try { 
        if (cnt % 100 == 0) { 
         foundRows = true; 
         context.SaveChanges(SaveChangesOptions.Batch); 
        } 
       } catch (Exception ex) { 
        Console.WriteLine("Exception deleting batch. {0}", ex.Message); 
       } 
      } 
      if (!foundRows) 
       break; 
      else { 
       context.SaveChanges(SaveChangesOptions.Batch); 
      } 
      foundRows = false; 
     } 
     Console.WriteLine("Done! Total Deleted: {0}", cnt); 
    } 
+0

어딘가에 다운로더 코드가 게시 될 가능성이 있습니까? 나는 비슷한 것을 할 준비를하고 있습니다. –

+1

전체 코드는 어디에도 게시되지 않지만이 게시물을 로그를 다운로드하는 기본 루프로 업데이트합니다. 이렇게하면 어떻게 작동하는지 알 수 있습니다. – Brosto

+0

이 답변은 문제를 공격하는 한 가지 방법만을 언급합니다. 일반적으로 롤링 방식으로 디스크에 기록하면 최신 데이터가 유지되고 현재 데이터를 롤백 할 수없는 Azure 저장소 계정에 기록됩니다. 또한 ETW를 통해 서식을 제어 할 수 있으므로 Systems.Diagnostics.Trace 대신 EventSource (ETW)를 사용하는 것이 좋습니다. – user3613932

6

: 그것은 푸른 진단을 구성하는 코드 몇 줄을합니다. 캡처 할 수준을 결정합니다 (자세한 정보, 정보 등). 얼마나 자주 로컬 캐시 된 로그 메시지를 Azure 저장소에 저장하려고하는지 (보통 15 분 간격으로 진행됩니다). 모든 인스턴스의 로그 메시지는 롤과 인스턴스를 정의하는 등록 정보와 함께 동일한 테이블에 집계되며 쉽게 쿼리 할 수 ​​있습니다 (또는 다운로드 할 수 있음).

는 당신은 심지어 추적 수신기를 작성하고 로컬 컴퓨터에 거의 실시간으로 로그 출력을 볼 수

등 Trace.TraceError(), Trace.TraceWarning()와 같은 추가 추적 문이 있습니다 . Azure AppFabric SDK 샘플 zip에는이를 수행하기위한 샘플 (\ ServiceBus \ Scenarios \ CloudTrace 아래에 있음)이 들어 있습니다.

2

이미 언급했듯이 Windows Azure Diagnostics를 사용하는 것이 좋습니다. 그러나 모든 인스턴스의 모든 로깅은 하나의 큰 목록으로 끝나기 때문에 읽기가 어려울 수 있습니다. 따라서 진단 테이블에 상대적으로 중요한 메시지 (경고 수준 이상) 만 보내려고합니다. 테이블을 직접 읽는 것이 고통 스럽습니다. 저기 몇 가지 도구가 있습니다, 나는 개인적으로 Cerebrata 진단 관리자를 사용합니다.

Trace 함수를 사용하면 제대로 작동하지만 NLog 또는 log4net과 같은 로깅 프레임 워크를 사용하는 것이 좋습니다. 그러면 Trace/Azure Diagnostics 및 기타 메시지를 로컬 저장소로 보낼 수있는 유연성이 조금 더 높아집니다.

예를 들어, 스레드 추적 문제를 추적하기 위해 추적 로깅을 추가했습니다. "\ ServiceLogs \ MyLog.txt"와 같은 루트 관련 파일 경로를 지정하면 인스턴스의 F : 드라이브로 출력된다는 것을 알았습니다. 그래서 나는 진단 테이블보다는 인스턴스 파일 시스템으로 모든 것을 라우팅했다. 로그를 보려면 각 인스턴스를 원격으로해야하지만,이 상황에서는 좋은 대가를 치러야합니다.

2

Azure 진단 모니터 추적 수신기를 가리키는 Enterprise Library 5.0 로깅 응용 프로그램 블록을 사용합니다. 내가 본 최고의 솔루션을 로그인 오류에 대한

Enterprise Library on Windows Azure

4

Elmah입니다. SQL 데이터베이스가 필요하지만 실제로는 문제를 진단하는 데 도움이되는 오류 로그 작성 도구입니다.그것은 Azure에서 잘 작동합니다.

+2

ELMAH를 테이블 저장소로 작업하도록 구성 할 수 있습니다. 예를 들어 http://www.wadewegner.com/2011/08/using-elmah-in-windows-azure-with-table-storage/을 참조하십시오. – Sam

3

내 모든 Azure 사이트에 대해 Azure 테이블에 사용자 지정 로깅을 사용합니다. 조금 더 많은 작업을했지만, 저장되는 정보를 더 잘 제어 할 수 있습니다. 위의 Brosto와 마찬가지로 로컬 시스템에 로그를 주기적으로 다운로드하는 로컬 프로세스가있는 것이 가장 좋습니다. TableServiceEntity에서 클래스를 파생 한 경우 로깅하려는 모든 필드를 포함하는 구조를 정의하고 같은 클래스를 사용하여 로컬 응용 프로그램에서 로그를 검색하는 데이터를 검색 할 수 있습니다. 다른 사람에게 도움이된다면 내 logging using Azure table storage 페이지에서이 작업을 수행하는 코드 예제를 일부 유지합니다.

Trace.Writeline 메서드를 사용하여 겪었던 문제 중 하나는 로그가 로컬 인스턴스에 저장되고 주기적으로 Azure 테이블 저장소로 전송된다는 점입니다. Azure 인스턴스의 일시적인 특성을 감안할 때 모든 로컬 저장소는 최상의 임시로 고려되어야합니다. 따라서 로그 데이터가 로컬 드라이브에 보관되는 동안 항상 로그 데이터를 잃어 버릴 수있는 창이 있습니다.

Azure 테이블 스토리지 트랜잭션의 비용을 감안할 때 Azure 스토리지에 직접 로깅하면 매우 비용 효율적입니다. 성능이 중요한 문제인 경우 별도의 스레드 (또는 스레드)를 로깅 데이터의 메모리 대기열에 제공하는 것이 중요 할 수 있습니다. Azure 인스턴스가 재활용되면 일시적인 데이터와 비슷한 문제가 분명 발생하지만이 작업을 수행하는 창은 훨씬 작아야합니다.

0

전통적인 로깅 프레임 워크가 아니지만 Story framework은 실제로 로그를 읽으려고 할 때 실제로 도움이 될 수 있습니다. 모든 로그를 작성하고 나중에 다른 관련 정보를 추가하여 나중에 읽을 필요가있을 때 유용합니다. 너가 필요한 모든것.

또한 Azure 테이블 저장소에 로그를 유지할 수 있습니다.

this blog post에 대한 추가 정보와 샘플이 있습니다.

관련 문제