Log4Net 사용 설명 (계속)

설명 은 지난 2008 년 블 로그 에 log4net 의 용법 소개 글 을 발표 한 이후 (사이트: http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx 많은 친구 들 이 블 로그 에 댓 글 을 달 아 세부 사항 을 물 었 습 니 다. 지금 은 비교적 보편적 인 문제 에 대해 조금 더 깊이 있 는 해답 을 하고 있 습 니 다. 만족 하 시 기 를 바 랍 니 다.
먼저, log4net 이 해결 하 는 문 제 는 기록 로그 의 프레임 워 크 를 제공 하 는 것 입 니 다. 이 는 여러 가지 목표 에 기록 하 는 실현 을 제공 합 니 다. 예 를 들 어 log4net 을 이용 하여 로그 정 보 를 파일, 콘 솔, Windows 이벤트 로그 와 데이터 베이스 (MS SQL Server, Access, Oracle 9i, Oracle 8i, DB2, SQLite 포함) 에 편리 하 게 기록 할 수 있 습 니 다.일반적으로 우 리 는 설명 적 인 문자열 만 제공 한 다음 에 log4net 은 실행 시 에 관 한 정 보 를 자동 으로 제공 합 니 다.
Log4Net 의 버 전 은 1.2.10 (2008 년 에 내 가 블 로 거 를 쓸 때 도 이 버 전) 입 니 다. NET 1.0 과 NET 1.1 과 NET 2.0 버 전이 있 습 니 다. NET 2.0 보다 높 은 버 전 을 사용 하고 있다 면 걱정 하지 마 세 요. 이 라 이브 러 리 를 직접 인용 할 수 있 습 니 다. 예 를 들 어 NET 2.0 에서 개발 한 것 처럼 인터넷 주 소 는:
http://logging.apache.org/log4net/

질문
우리 가 프로젝트 를 개발 할 때 config 파일 에 사용 되 며, config 파일 에 log4net 를 설정 할 수 있 습 니 다.이 점 은 웹 프로젝트 와 WinForm 프로젝트 가 모두 같다.주의해 야 할 것 은 웹 프로젝트 에서 일반적으로 낮은 권한 의 역할 로 웹 프로젝트 를 실행 하기 때문에 파일 로 그 를 사용 할 때 이 프로젝트 루트 폴 더 밖 에 두 지 않도록 주의해 야 합 니 다.
config
파일 의 설정
log4net 를 사용 하려 면 먼저 config 파일 의 < configSection > 노드 에 설정 을 추가 해 야 합 니 다 (이 노드 가 없 으 면 수 동 으로 추가 하 십시오). 다음 과 같 습 니 다.
 

 
  1. <configSections> 
  2.   <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> 
  3. </configSections> 

그 밖 에 최고급 노드 인 < configuration > 아래 에 < log4net > 하위 노드 를 추가 해 야 합 니 다.< log4net > 노드 아래 에 < appender > 하위 노드 를 추가 할 수 있 습 니 다. 각 < appender > 하위 노드 는 로 그 를 기록 하 는 방식 을 대표 합 니 다.
구체 적 으로 다음 과 같은 Appender 가 있 습 니 다.
AdoNetAppender: ADO. NET 을 이용 하여 데이터베이스 에 기록 한 로그 입 니 다.
AnsiColorTerminalAppender: ANSI 창 터미널 에 높 은 밝기 의 로그 이 벤트 를 기록 합 니 다.
AspNetTrace Appender: asp. net 의 Trace 방식 으로 기 록 된 로 그 를 볼 수 있 습 니 다.
Buffering Forwarding Appender: 하위 Appenders 로 출력 하기 전에 로그 이 벤트 를 캐 시 합 니 다.
Console Appender: 로 그 를 콘 솔 에 출력 합 니 다.
EventLogAppender: 로 그 를 Windows 이벤트 로그 에 기록 합 니 다.
FileAppender: 로 그 를 파일 에 기록 합 니 다.
LocalSyslogAppender: 로 그 를 local syslog service 에 기록 합 니 다 (UNIX 환경 에서 만 사용).
메모리 버퍼 에 로 그 를 저장 합 니 다.
NetSend Appender: Windows Messenger service 에 로 그 를 출력 합 니 다. 이 로그 정 보 는 사용자 터미널 대화 상자 에 표 시 됩 니 다.
Remote Syslog Appender: UDP 네트워크 프로 토 콜 을 통 해 로 그 를 Remote syslog service 에 기록 합 니 다.
Remoting Appender:. NET Remoting 을 통 해 로 그 를 원 격 수신 단 에 기록 합 니 다.
RollingFileAppender: 파일 에 로 그 를 스크롤 백 으로 기록 합 니 다.
SmtpAppender: 메 일 에 로 그 를 기록 합 니 다.
TraceAppender:. NET trace 시스템 에 로 그 를 기록 합 니 다.
UdpAppender: 로그 connectionless UDP datagrams 형식 을 원 격 숙주 나 UdpClient 형식 으로 방송 합 니 다.
log4net 사용 에 대하 여
사용 가능 한 매개 변수
% m (message): ILog. Debug (...) 와 같은 출력 로그 메시지
% n (new line): 줄 바 꾸 기
% d (datetime): 현재 문장 이 실 행 될 때 출력
% r (run time): 출력 프로그램 이 실 행 될 때 부터 현재 문장 으로 실 행 될 때 까지 소모 하 는 밀리초 수
% t (thread id): 현재 구문 이 있 는 스 레 드 ID
% p (priority): 로그 의 현재 우선 순위, 즉 DEBUG, INFO, WARN... 등
% c (class): 현재 로그 대상 의 이름 입 니 다. 예 를 들 어:
% f (file): 출력 문 이 있 는 파일 이름 입 니 다.
% l (line): 출력 문 이 있 는 줄 번호 입 니 다.
% 숫자: 이 항목 의 최소 길 이 를 표시 합 니 다. 부족 하면 빈 칸 으로 채 웁 니 다. 예 를 들 어 '% - 5level' 은 level 의 최소 폭 이 5 글자 이 고 실제 길이 가 5 글자 가 부족 하면 빈 칸 으로 채 웁 니 다.
설정 에 '% date [% thread] (% file:% line)% - 5level% logger [% property {NDC}] -% message% newline' 이 있 으 면 실제 로그 에는 다음 과 같은 형식 이 있 습 니 다.
"기록 시간: 2010 - 11 - 17 16: 16: 36, 561 스 레 드 ID: [9] 로그 단계: 파일: 소재 줄 ERROR 오류 클래스: Log4NetDemo. Program property: [(null)] - 오류 설명: error
System. Exception: 여기 서 이상 이 발생 했 습 니 다. Error Number: 2036084948 "
데이터베이스 지원
앞에서 말 했 듯 이 log4net 은 MS SQL Server, Access, Oracle9i, Oracle8i, DB2, SQLite 를 포함 한 데이터 베 이 스 를 지원 합 니 다. 파일 형 데이터 베이스 (예 를 들 어 Access 또는 SQLite) 라면 데이터베이스 파일 의 위 치 를 지정 해 야 합 니 다 (웹 에 서 는 읽 기와 쓰기 권한 이 있 는 폴 더 에 지정 하고 표를 만 드 는 것 이 좋 습 니 다).네트워크 데이터베이스 라면 정확 한 데이터베이스 연결 문자열 을 지정 해 야 합 니 다.
예 를 들 어 Oracle 데이터베이스 에 기록 하려 면 설정 파일 에 < appender > 노드 를 추가 할 수 있 습 니 다. 설정 은 다음 과 같 습 니 다.
 

 
  1. <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
  2.       <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient" /> 
  3.       <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" /> 
  4.       <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" /> 
  5.       <bufferSize value="128" /> 
  6.       <parameter> 
  7.         <parameterName value=":log_date" /> 
  8.         <dbType value="DateTime" /> 
  9.         <layout type="log4net.Layout.RawTimeStampLayout" /> 
  10.       </parameter> 
  11.       <parameter> 
  12.         <parameterName value=":thread" /> 
  13.         <dbType value="String" /> 
  14.         <size value="255" /> 
  15.         <layout type="log4net.Layout.PatternLayout"> 
  16.           <conversionPattern value="%thread" /> 
  17.         </layout> 
  18.       </parameter> 
  19.       <parameter> 
  20.         <parameterName value=":log_level" /> 
  21.         <dbType value="String" /> 
  22.         <size value="50" /> 
  23.         <layout type="log4net.Layout.PatternLayout"> 
  24.           <conversionPattern value="%level" /> 
  25.         </layout> 
  26.       </parameter> 
  27.       <parameter> 
  28.         <parameterName value=":logger" /> 
  29.         <dbType value="String" /> 
  30.         <size value="255" /> 
  31.         <layout type="log4net.Layout.PatternLayout"> 
  32.           <conversionPattern value="%logger" /> 
  33.         </layout> 
  34.       </parameter> 
  35.       <parameter> 
  36.         <parameterName value=":message" /> 
  37.         <dbType value="String" /> 
  38.         <size value="4000" /> 
  39.         <layout type="log4net.Layout.PatternLayout"> 
  40.           <conversionPattern value="%message" /> 
  41.         </layout> 
  42.       </parameter> 
  43.     </appender> 

물론 위의 설정 에 있 는 SQL 구문 에서 이 표 의 인 자 를 볼 수 있 습 니 다. 로그 표 의 생 성 문 구 는 다음 과 같 습 니 다.
 

 
  1. create table log (  
  2.    Datetime timestamp(3),  
  3.    Thread varchar2(255),  
  4.    Log_Level varchar2(255),  
  5.    Logger varchar2(255),  
  6.    Message varchar2(4000)  
  7.    ); 

 
이 예 에서 주공 은 로 그 를 SQLite 라 는 단기 데이터베이스 에 기록 하 는 방식 을 사 용 했 고 로 그 를 기록 할 때의 파일 이름과 줄 번 호 를 기록 하여 SQLite 를 만 드 는 SQL 문 구 는 다음 과 같다.
 

  
  1. CREATE TABLE Log (  
  2.     LogId        INTEGER PRIMARY KEY,  
  3.     Date        DATETIME NOT NULL,  
  4.     Level        VARCHAR(50) NOT NULL,  
  5.     Logger        VARCHAR(255) NOT NULL,  
  6.     Source        VARCHAR(255) NOT NULL,  
  7.     Message        TEXT DEFAULT NULL 
  8.     ); 

추 가 된 < appender > 노드 설정 은 다음 과 같 습 니 다.
 

  
  1. <appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender"> 
  2.   <bufferSize value="100" /> 
  3.   <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" /> 
  4.   <!--SQLite --> 
  5.   <connectionString value="Data Source=c:\\log4net.db;Version=3;" /> 
  6.   <commandText value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" /> 
  7.   <parameter> 
  8.     <parameterName value="@Date" /> 
  9.     <dbType value="DateTime" /> 
  10.     <layout type="log4net.Layout.RawTimeStampLayout" /> 
  11.   </parameter> 
  12.   <parameter> 
  13.     <parameterName value="@Level" /> 
  14.     <dbType value="String" /> 
  15.     <layout type="log4net.Layout.PatternLayout"> 
  16.       <conversionPattern value="%level" /> 
  17.     </layout> 
  18.   </parameter> 
  19.   <parameter> 
  20.     <parameterName value="@Logger" /> 
  21.     <dbType value="String" /> 
  22.     <layout type="log4net.Layout.PatternLayout"> 
  23.       <conversionPattern value="%logger" /> 
  24.     </layout> 
  25.   </parameter> 
  26.   <parameter> 
  27.     <parameterName value="@Source" /> 
  28.     <dbType value="String" /> 
  29.     <layout type="log4net.Layout.PatternLayout"> 
  30.       <conversionPattern value="%file:%line" /> 
  31.     </layout> 
  32.   </parameter> 
  33.   <parameter> 
  34.     <parameterName value="@Message" /> 
  35.     <dbType value="String" /> 
  36.     <layout type="log4net.Layout.PatternLayout"> 
  37.       <conversionPattern value="%message" /> 
  38.     </layout> 
  39.   </parameter> 
  40. </appender> 

위의 설정 에서 데 이 터 를 삽입 한 SQL 문장 과 매개 변수 정 보 를 볼 수 있 습 니 다. 아래 의 < parameter > 노드 는 바로 삽 입 된 데 이 터 를 지정 합 니 다. 예 를 들 어 우리 가 지정 한 SQL 문장의 '@ Source' 매개 변 수 는 log4net 의 '% file:% line' 매개 변수 에서 유래 합 니 다. 즉, 이 두 매개 변 수 는 ':' 로 연 결 됩 니 다.
질문
장시간 사용 되 고 대량의 업무 로 그 를 가 진 시스템 에 있어 서 FileAppender 를 사용 하여 로 그 를 한 파일 에 기록 하면 성능 저하 문 제 를 일 으 킬 수 있 습 니 다. 저 는 시스템 로그 파일 이 800 여 M 에 달 하 는 것 을 본 적 이 있 습 니 다. 마지막 으로 시스템 이 신속하게 응답 하지 못 하 는 상황 에서 Rolling FileAppender 순환 기록 로 그 를 사용 하 는 것 을 고려 할 수 있 습 니 다.하 나 는 지정 한 파일 의 최대 길이 입 니 다. 초과 하면 다음 설정 과 같은 파일 을 다시 만 듭 니 다.
 

 
  1. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
  2.   <file value="RollingFileAppender_log.txt" /> 
  3.   <appendToFile value="true" /> 
  4.   <rollingStyle value="Size" /> 
  5.   <maxSizeRollBackups value="10" /> 
  6.   <maximumFileSize value="100KB" /> 
  7.   <staticLogFileName value="true" /> 
  8.   <layout type="log4net.Layout.PatternLayout"> 
  9.     <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" /> 
  10.   </layout> 
  11. </appender> 

위의 설정 에서 로그 파일 당 최대 100 KB, 최대 로그 파일 개 수 는 10 으로 생 성 된 로그 파일 이름 은 RollingFileAppender 입 니 다.log.txt.1, RollingFileAppender_log.txt.2 ... RollingFileAppender_log. txt. 10, 기록 한 로그 가 10 개 를 넘 으 면 RollingFileAppenderlog. txt. 1 덮어 쓰기 시작 합 니 다.
날짜 에 따라 로 그 를 기록 하 는 방법 도 있 습 니 다. 설정 은 다음 과 같 습 니 다.
 

 
  1. <appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender"> 
  2.   <file value="RollingLogFileAppender_DateFormat_log.txt" /> 
  3.   <appendToFile value="true" /> 
  4.   <rollingStyle value="Date" /> 
  5.   <!--<datePattern value="yyyyMMdd-HHmm" />--> 
  6.   <datePattern value="yyyyMMdd" /> 
  7.   <layout type="log4net.Layout.PatternLayout"> 
  8.     <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" /> 
  9.   </layout> 
  10. </appender> 

이렇게 되면 매일 로 그 를 한 파일 에 기록 합 니 다. 이날 로그 파일 의 이름 은 'RollingLogFileAppender DateFormat log. txt' 입 니 다. 이날 로그 가 아 닌 날 짜 를 가 져 옵 니 다. 예 를 들 어 'RollingLogFileAppender DateFormat log. txt 20101117' 은 2010 년 11 월 17 일 로 그 를 표시 합 니 다. 이렇게 하면 매일 로 그 를 쉽게 나 눌 수 있 습 니 다.앞으로 찾 아 보 는 것 도 상당히 편리 할 것 이다.
설정 에서 로 그 를 사용 하고 닫 습 니 다.
config 파일 에서 로 그 를 편리 하 게 닫 고 사용 할 수 있 습 니 다. 바로 < root > 에서 설정 하 는 것 입 니 다. 다음 과 같은 예 입 니 다.
 

 
  1. <root> 
  2.   <!-- --> 
  3.   <appender-ref ref="LogFileAppender" /> 
  4.   <!-- --> 
  5.   <appender-ref ref="ConsoleAppender" /> 
  6.   <!--Windows --> 
  7.   <!--<appender-ref ref="EventLogAppender" />--> 
  8.   <!--SQLite --> 
  9.   <appender-ref ref="AdoNetAppender_SQLite" /> 
  10.   <!--RollingFileAppender --> 
  11.   <appender-ref ref="RollingFileAppender" /> 
  12.   <!--RollingFileAppender , --> 
  13.   <appender-ref ref="RollingLogFileAppender_DateFormat" /> 
  14.   <!--  ,  
  15.   <appender-ref ref="AdoNetAppender_Access" /> 
  16.   --> 
  17. </root> 

위의 예 에서 알 수 있 듯 이 로그 출력 목적 지 를 추가 하려 면 < appender - ref > 노드 를 추가 하면 됩 니 다. 뒤의 ref 는 config 에 설 치 된 appender name 입 니 다. 취소 하려 면 이 줄 을 삭제 하거나 주석 을 달 면 됩 니 다.
Log4Net 사용
우선 config 파일 을 추가 해 야 합 니 다. 라 이브 러 리 항목, 명령 행 프로그램 및 WinForm 에 app. config 를 추가 하고 WebForm 에 웹. config 를 추가 합 니 다.
다음은 WinForm 프로젝트 에서 Log4Net 을 사용 하 는 예 입 니 다.
 

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using log4net;  
  5. using System.Reflection;  
  6.  
  7. // , log4net .config  
  8. // WinForm( MyDemo.exe, MyDemo.exe.config )  
  9. // WebForm, web.config  
  10. [assembly: log4net.Config.XmlConfigurator(Watch = true)]  
  11. namespace Log4NetDemo  
  12. {  
  13.     class Program  
  14.     {  
  15.         static void Main(string[] args)  
  16.         {  
  17.             Random random = new Random();  
  18.             for (int i = 0; i < 1; i++)  
  19.             {  
  20.                 //  
  21.                 //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);  
  22.  
  23.                 ILog log=log4net.LogManager.GetLogger(typeof(Program));  
  24.                 //  
  25.                 //log.Error("error", new Exception(" ,Error Number:"+random.Next()));  
  26.                 //  
  27.                 //log.Fatal("fatal", new Exception(" ,Exception Id:"+random.Next()));  
  28.                 //  
  29.                 //log.Info(" : ");  
  30.                 //  
  31.                 //log.Debug(" :debug");  
  32.                 //  
  33.                 //log.Warn(" :warn");  
  34.             }  
  35.             Console.WriteLine(" 。");  
  36.             Console.Read();  
  37.  
  38.         }  
  39.     }  

WebForm 에서 도 Log4net 을 사용 할 수 있 습 니 다. 다음은 ASP. NET 에서 Log4Net 을 사용 하 는 예 입 니 다.
 

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Web;  
  4. using System.Web.UI;  
  5. using System.Web.UI.WebControls;  
  6. using log4net;  
  7. using System.Reflection;  
  8.  
  9. [assembly: log4net.Config.XmlConfigurator(Watch = true)]  
  10. public partial class _Default : System.Web.UI.Page   
  11. {  
  12.     protected void Page_Load(object sender, EventArgs e)  
  13.     {  
  14.         if (!Page.IsPostBack)  
  15.         {  
  16.             Random random = new Random();  
  17.             for (int i = 0; i < 1; i++)  
  18.             {  
  19.                 //  
  20.                 ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);  
  21.  
  22.                 //ILog log = log4net.LogManager.GetLogger(typeof(Program));  
  23.                 //  
  24.                 //log.Error("error", new Exception(" ,Error Number:"+random.Next()));  
  25.                 //  
  26.                 //log.Fatal("fatal", new Exception(" ,Exception Id:"+random.Next()));  
  27.                 //  
  28.                 //log.Info(" : ");  
  29.                 //  
  30.                 //log.Debug(" :debug");  
  31.                 //  
  32.                 log.Warn(" :warn");  
  33.                 Response.Write(" 。");  
  34.             }  
  35.         }  
  36.     }  

그들의 코드 는 거의 다 르 지 않다 는 것 을 알 수 있다.
다음은 WinForm 아래 config 파일 의 전체 설정 입 니 다. 이 설정 파일 에 사용 되 는 코드 는 위 에서 사용 하 는 코드 입 니 다. LogFileAppender, ConsoleAppender, EventLogAppender, AdoNetAppender 를 사용 합 니 다.SQLite、RollingFileAppender、RollingLogFileAppender_DateFormat 방식 으로 로 그 를 기록 하 는 것 은 모두 로 컬 에서 테스트 를 통과 합 니 다.완전한 config 첨부 파일 을 보십시오.
요약:
이 편 은 주로 이전 Log4Net 에 관 한 미진 한 점 을 보충 하고 일부 친구 들 이 이 블 로그 에 올 린 질문 에 상세 하 게 대답 하 였 으 며, 미진 한 점 이 있 으 면 이 글 에 메 시 지 를 남 겨 주세요.만약 초보 자가 우연히 config 파일 이 무엇 인지 모 르 는 것 을 지나 가면 을 보십시오. 주 소 는: http://zhoufoxcn.blog.51cto.com/792419/166441 입 니 다.
주공

좋은 웹페이지 즐겨찾기