2011-05-04 1 views
1

누군가가 로깅 문을 더 편리하게 구성 할 수있는 방법을 알고 있습니까?C# 로그 질문

내가 아니라, 여기에 작은 예입니다, 그런 방법이 없습니다 추측 :하지만, 분명히

 // Take the longest path in the graph and convert it into the 
     // image series, note that we project every element from the 
     // sequence into the image path so that 'new Series(...)' constructor 
     // could be used. 
     var paths = EnumerateSimpleAndLoopedPaths().ToList(); 

     logger.Log(Something1); 

     if (paths.Any()) 
     { 
      // Take the longest possible path. 
      var selectedPath = paths.OrderBy(x => x.Count()).Last(); 

      logger.Log(Something2); 

      var imagesForSelectedPath = selectedPath.SelectMany(... 

logger.Log 또는 Log이든 단지의 주요 코드 부분에 대한 쓰레기 같은 문장, 어쩌면이 똑똑한 방법 어딘가에 가져 가려고? 로그인 허용 PostSharp 같은 좀 좋은 패키지가 알고

는, 전후에 수행 할 -하지만 자신의 작품 일부 중간 결과를 기능이 있다면 무엇을 기록?

아니면 그냥 분해 문제이며 모든 로그 가능한 항목을 [Loggable]으로 표시 할 수 있도록 모든 항목을 더 분해해야합니다.

의견을 보내 주시면 감사하겠습니다. 코드에 로그인 할 때 무엇을합니까?

답변

1
에 대해이 중간 작업을 수행하기 위해 추가 개인 방법과 방법의 내부 로직을 분리하는 방법

,

또는, 만 사용할 수 있습니다 클래스에 너무 많은 방법으로 끝낼하지 않으려면 ...

(내부 클래스의 생성자에 대한 부모에 대한 참조를 전달하는 경우 부모 클래스의 개인 멤버에 자동으로 액세스 할 수있는) 내부 클래스를 정의합니다.
내부 클래스에는 내부 클래스의 메서드에서만 액세스 할 수있는 많은 개인 메서드가있을 수 있습니다. 따라서 하나의 public/internal 메소드를 내부 클래스에 정의하고, 외부 클래스의 메소드에 의해 호출되도록하십시오.

두 가지 방법 모두에서 AOP에 대한 속성 (예 : PostSharp)으로 새 메소드를 장식 할 수 있습니다.

0

AOP 프레임 워크의 한계로 인해 분해를 사용하여 모든 이점을 얻을 필요가 있습니다. 어쨌든이 일을해야합니다. 방법은 매우 단순하게 유지되어야하며 오직 한 가지 만해야합니다. 조건 논리를 메소드로 추출한 다음 PostSharp 측면을 작성하십시오.

당신이 조건에서 로깅을해야한다면 그 코드 블록은 자신의 방법에 들어가기에 충분하기 때문에 이것을 말합니다. 어쨌든 임시적인 것이어야하므로 어떤 이유로 든 할 수 있습니다.