2012-08-01 4 views
4

log4net을 웹 응용 프로그램에 통합하려고합니다. 나는 이미 .net mvc에 기반한 새로운 부분으로 그렇게했지만, 웹 폼 기반의 앱에 통합하는 데 문제가있다. 나는 예를 둘러 보았고 하나도 발견하지 못했다.asp.net 웹 양식에서 log4net 사용

내 질문의 범위를 좁히기 위해 내 web.config 파일을 구성하는 방법을 알고 있다고 가정 해 보겠습니다. 내 질문은 다음과 같습니다. log4net에 대한 실제 호출을 "Global.asax"파일에 배치하고 기본 페이지 (다른 모든 페이지가 빌드되어 있음)에 배치하는 것을 고려했습니다. 이러한 장소에 실제 코드를 배치해야하며 코드를 어디에 두어야합니까?

(2) 코드를 이해하면 로그를 인스턴스화하고 로그 기록이 필요할 때 (로그의 특성이 web.config에 의해 처리됨) 필요하지만 그 코드가 실제로 어떻게 보이는지 알 필요가 없습니다. 그렇다면 실제로 파일에 어떤 코드를 삽입해야합니까? (예를 감상 할 수있다)

감사

+0

이 외에도에서 HTH, 당신이 http://code.google.com/p/elmah/ – Adil

+0

안녕하세요 기록 log4net에 로그인 할 아주 쉬운 방법을 찾고 있었다 유용 할 수 있습니다뿐만 아니라 ELMAH 체크 아웃 그래서 잘하면 이것은 당신을 위해 URL로 다음과 같이하시기 바랍니다 유용합니다 [ASP.NET 웹 양식 (쉬운 방법)에서 Visual Studio 플랫폼과 Nuget에서 Log4net을 사용하는 방법] (http://stackoverflow.com/questions/42569713/how -to-use-log4net-nuget-with-visual-studio-in-the-asp-net-web-for/42572770 # 42572770) –

답변

6

단지 필요한 곳에 코드를 배치하십시오.

static Logger log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

그래서 로거는 전체 공간을 포함하여 현재 클래스의 이름을 가져옵니다 ... 난 그냥 내가 필요한 모든 페이지에서이 줄을 사용하여 시작합니다. 제가

또한
protected void Application_Error(object sender, EventArgs e) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("Unhandled error occured in application. Sender: "); 
     sb.AppendLine(Request.RawUrl); 
     sb.Append("Query: "); 
     sb.AppendLine(Request.QueryString.ToString()); 

     Exception ex = Server.GetLastError().GetBaseException(); 

     log.Error(sb.ToString(), ex); 
     Server.ClearError(); 

     Response.Redirect("~/Error.aspx"); 
    } 

로깅 예 오차의 Global.asax에서 로거를 사용하지만의 Web.config의 로그의 구성을 분리해서. 나에게 더 쉽고 큰 파일을 다룰 필요가 없다. 또한 로그 구성 파일을 변경할 때 응용 프로그램이 다시 시작되지 않는다고 생각합니다. web.config를 업데이트하면 응용 프로그램이 항상 다시 시작됩니다.

은 그냥 Web.config의

<log4net configSource="log.config"/> 

어딘가에이 줄을 추가 한 다음 파일 "보다 추가

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

의 Web.config의 에 다음을 추가 할 필요가 이러한 목표를 달성하기 위해 log.config "에는 모든 리스너가 구성되어 있습니다. 파일을 프로덕션/테스트 환경에 복사하는 것을 잊지 마십시오. 그렇지 않으면 이상한 오류 메시지가 나타날 수 있습니다.

+0

감사합니다 nWorx, 이것이 내가 찾고 있던 것입니다. 하지만 오류로 인해 발생한 GLobal.asax 파일의 코드는 어떻게됩니까? – crawfish

+0

그냥 확인 http://msdn.microsoft.com/en-us/library/24395wz3.aspx – nWorx

+0

global.asax 파일에서 올바르게 로거를 인스턴스화하는 방법을 알고 있습니까? – crawfish

1

가 기본 페이지에 배치가 GetLogger를 사용하여 인스턴스화 할 때 당신은 당신이 (약 가능한 한 특정되는 로깅있는 페이지에 전달할 수 있습니다 다음, 좋은 생각처럼 들린다 로그 호출이 실제로 디버깅에 도움이되는 곳). 또한 항상 나를 잡아내는 인스턴스화 후 .Configure에 대한 호출이 필요합니다 (이 경우 Log4Net.Configure를 가져와야합니다)

청취자 구성을 web.config에두고 LevelRangeFilter를 통해 최소/최대 레벨을 정의하십시오 DEBUG가 가장 낮고 FATAL이 가장 높음).

사용법은 매우 간단합니다. 필요한 수준 인 EG : log.Info, log.InfoFormat, log.Error, log.ErrorFormat (형식은 String.Format처럼 작동합니다) - 최소 구성된 것 이하 로깅 수준은 무시되므로 원하는만큼 로그인 할 수 있습니다.

엘마도 들었습니까? 이를 통해 처리되지 않은 예외를 추적 할 수 있습니다. http://code.google.com/p/elmah/

0

로거 사용 경험을 공유하겠습니다. 일반적으로 IOC 컨테이너, 즉 Windsor에서 사용합니다. 그래서 로거 초기화는 Global.asax 파일에서 수행합니다.이 파일은 앱마다 한 번 실행되며 모든 요청을 무시합니다. 이것은 로거를 초기화하는 적절한 장소입니다. 로그를 불러야하는 곳은 권장 사항이 없습니다. 필요한 곳에 전화해야합니다. 페이지 수명주기에 따라 일부 이벤트를 기록하는 경우 파일 뒤에 페이지 코드에서 로거를 사용해야합니다. 하지만 구성 요소를 추적하려면 별도의 라이브러리에서 논리를 추출하고 논리 라이브러리 내에서 로거를 사용하십시오.

관련 문제