2010-07-14 4 views
0

우리는 클라이언트 응용 프로그램에서 log4net을 사용하여 생성 된 상대적으로 작은 (500K 미만, 일반적으로 50K 미만으로 읽음) 로그 파일이 많습니다 (읽기 : 50,000). (그들은 야간 또는 업로드 할 때 중 하나).NET에서 프로그램으로 로그 파일 구문 분석

Start Painless log 
Framework:8.1.7.0 
Application:8.1.7.0 
2010-05-05 19:26:07,678 [Login ] INFO Application.App.OnShowLoginMessage(194) - Validating Credentials... 
2010-05-05 19:26:08,686 [1  ] INFO Application.App.OnShowLoginMessage(194) - Checking for Application Updates... 
2010-05-05 19:26:08,830 [1  ] INFO Framework.Globals.InstanceStartup(132) - Application Startup 
2010-05-05 19:26:09,293 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Purchase History Data>:True 
2010-05-05 19:26:09,293 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Shopping Assistant>:True 
2010-05-05 19:26:09,294 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Shopping List>:True 
2010-05-05 19:26:09,294 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Teeth>:True 
2010-05-05 19:26:09,294 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Scanner>:True 
2010-05-05 19:26:09,294 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Value Comparison>:True 
2010-05-05 19:26:09,294 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Lotus Notes CRM>:True 
2010-05-05 19:26:09,295 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Salesforce.com>:False 
2010-05-05 19:26:09,295 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Lotus Notes Mail>:True 
2010-05-05 19:26:09,295 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Sales Leads>:True 
2010-05-05 19:26:09,295 [1  ] INFO Framework.PluginManager.LogPluginState(150) - Plugin <Configurator>:True 
2010-05-05 19:26:09,297 [1  ] INFO Application.App.OnShowLoginMessage(194) - Validating Database... 
2010-05-05 19:26:10,342 [1  ] INFO Application.App.OnShowLoginMessage(194) - Validating Database... 
2010-05-05 19:26:10,489 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Global Handlers... 
2010-05-05 19:26:10,495 [1  ] INFO Application.App.OnShowLoginMessage(194) - Starting Main Window... 
2010-05-05 19:26:10,496 [1  ] INFO Application.App.OnShowLoginMessage(194) - Initializing Components... 
2010-05-05 19:26:11,145 [1  ] INFO Application.App.OnShowLoginMessage(194) - Restoring Location... 
2010-05-05 19:26:11,164 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Plug Ins... 
2010-05-05 19:26:11,169 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Panels...Order Manager 
2010-05-05 19:26:11,181 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Orders... 
2010-05-05 19:26:11,274 [1  ] INFO Application.App.OnShowLoginMessage(194) - Done Loading 1 Order 
2010-05-05 19:26:11,314 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Panels...All Products 
2010-05-05 19:26:11,471 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Purchase History Data 
2010-05-05 19:26:11,545 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Shopping List 
2010-05-05 19:26:11,597 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Teeth 
2010-05-05 19:26:11,768 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Scanner 
2010-05-05 19:26:11,810 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Value Comparison 
2010-05-05 19:26:11,840 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...Sales Leads 
2010-05-05 19:26:11,922 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Tabbed Areas...(Done!) 
2010-05-05 19:26:11,923 [1  ] INFO Application.App.OnShowLoginMessage(194) - Adding Handlers... 
2010-05-05 19:26:11,925 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Main Window Handlers... 
2010-05-05 19:26:11,932 [1  ] INFO Application.App.OnShowLoginMessage(194) - Loading Main Menu... 
2010-05-05 19:26:11,949 [1  ] INFO Application.App.OnShowLoginMessage(194) - Initialization Complete. 
2010-05-05 19:26:13,662 [1  ] INFO Framework.ProductSearch.Search(342) - User entered term: <> 

나는 (항상 오류 또는 FATAL에 로그인) 중 하나 예외를 추출하기 위해 이러한 로그 서버 측 구문 분석 할 수 있도록하고 싶습니다 : 일반적인 로그처럼 보인다 나 같은 다른 특정 로그 메시지 :

2010-05-05 20:05:24,951 [1  ] INFO Framework.ProductSearch.Search(342) - User entered term: <kavo> 

그래서 우리는 사람들이 정말이 찾고 무엇인지 찾을 수있는 'KAVO'용어를 얻을 수 있습니다.

나는 String.Split()과 유사한 메소드를 사용하여 손으로 텍스트를 파싱 해봤지만 휠을 재발 명하고있는 것처럼 느껴졌다.

이런 종류의 로그를 추출하는 좋은 라이브러리가 있습니까?

답변

1

우리는 단순히 로그 형식으로 XML을 출력하는 결과를 얻었으며 구문 분석은 간단 해졌습니다.

0

이는 같은 패턴을 검색 할 수 있습니다 .NET regular expressions

이 방법의 일반적인 경우처럼 보인다 "용어를 입력 한 사용자 :". 나중에 그룹 일치를 추출 할 수 있습니다

0

log4net 자체 형식 패턴을 읽을 수 있습니까? 형식을 다시 읽으면 % message % 섹션을 구문 분석 할 수 없습니까?

더 나은 질문은 어쩌면 로그 호출을 작성하거나 log4net을 통해 다른 로그 파일을 가지고 % message %를 기록한 로그 파일을 데이터베이스에 쓰지 않고 로그 란 검색어입니까? 나는 당신이 그것을 피할 수 있다면 로그 분석을 원한다고 생각하지 않는다. 적어도 앞으로 나아갈 것이다.

+0

이 아이디어를 중심으로 Serilog (http://serilog.net)가 구축되었습니다. Log.Information ("Hello {0}", "world")'를 쓸 때 형식 문자열과 매개 변수는 별도로 저장되며 표시 용으로 만 렌더링됩니다. 구조화 된 로그 (예 : JSON)를 로깅 텍스트처럼 쉽게 작성합니다. –

4

Microsoft의 Log Parser (Download here)을 사용할 수 있습니다. 이 도구는 프로그래밍 방식으로 결과에 액세스 할 수있는 COM 인터페이스도 제공합니다. This blog post에는 버전 2.1에서이를 수행하기위한 작은 (부분) 지침이 있습니다.

이제 휠을 재발 명한다는 느낌이 들지 않고 지나치게 엔지니어링 된 것처럼 느껴질 것입니다. ;)

+2

+1 LogParser 꽤 큰 파일에 대해 성공적으로 사용해 왔습니다. 그것은 매우 유연하고 (구문 분석/추출을위한 SQL과 같은 구문) 빠르고 빠릅니다. 구조화 된 Logfileformat (예 : CSV)를 사용하면 더 나은 환경을 경험할 수 있습니다. –

+0

표준 log4net 로그 파일 (예 : CSV 또는 XML이 아님) – Martin

+0

에서 log4net 로그 파일을 사용하여 로그 파일을 logparser가 이해할 수있는 것으로 (예 : CSV) 변환하거나 LogParser Lizard와 함께 사용할 수 있는지 여부를 확인할 수 있습니까? regex 확장 http://www.lizard-labs.net/log_parser_lizard.aspx –