Log4Net 사용 설명 (계속)
먼저, 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 > 노드 에 설정 을 추가 해 야 합 니 다 (이 노드 가 없 으 면 수 동 으로 추가 하 십시오). 다음 과 같 습 니 다.
- <configSections>
- <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
- </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 > 노드 를 추가 할 수 있 습 니 다. 설정 은 다음 과 같 습 니 다.
- <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
- <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient" />
- <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
- <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
- <bufferSize value="128" />
- <parameter>
- <parameterName value=":log_date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value=":thread" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%thread" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value=":log_level" />
- <dbType value="String" />
- <size value="50" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%level" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value=":logger" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value=":message" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- </appender>
물론 위의 설정 에 있 는 SQL 구문 에서 이 표 의 인 자 를 볼 수 있 습 니 다. 로그 표 의 생 성 문 구 는 다음 과 같 습 니 다.
- create table log (
- Datetime timestamp(3),
- Thread varchar2(255),
- Log_Level varchar2(255),
- Logger varchar2(255),
- Message varchar2(4000)
- );
이 예 에서 주공 은 로 그 를 SQLite 라 는 단기 데이터베이스 에 기록 하 는 방식 을 사 용 했 고 로 그 를 기록 할 때의 파일 이름과 줄 번 호 를 기록 하여 SQLite 를 만 드 는 SQL 문 구 는 다음 과 같다.
- CREATE TABLE Log (
- LogId INTEGER PRIMARY KEY,
- Date DATETIME NOT NULL,
- Level VARCHAR(50) NOT NULL,
- Logger VARCHAR(255) NOT NULL,
- Source VARCHAR(255) NOT NULL,
- Message TEXT DEFAULT NULL
- );
추 가 된 < appender > 노드 설정 은 다음 과 같 습 니 다.
- <appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender">
- <bufferSize value="100" />
- <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" />
- <!--SQLite -->
- <connectionString value="Data Source=c:\\log4net.db;Version=3;" />
- <commandText value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" />
- <parameter>
- <parameterName value="@Date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@Level" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%level" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Logger" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Source" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%file:%line" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Message" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- </appender>
위의 설정 에서 데 이 터 를 삽입 한 SQL 문장 과 매개 변수 정 보 를 볼 수 있 습 니 다. 아래 의 < parameter > 노드 는 바로 삽 입 된 데 이 터 를 지정 합 니 다. 예 를 들 어 우리 가 지정 한 SQL 문장의 '@ Source' 매개 변 수 는 log4net 의 '% file:% line' 매개 변수 에서 유래 합 니 다. 즉, 이 두 매개 변 수 는 ':' 로 연 결 됩 니 다.
질문
장시간 사용 되 고 대량의 업무 로 그 를 가 진 시스템 에 있어 서 FileAppender 를 사용 하여 로 그 를 한 파일 에 기록 하면 성능 저하 문 제 를 일 으 킬 수 있 습 니 다. 저 는 시스템 로그 파일 이 800 여 M 에 달 하 는 것 을 본 적 이 있 습 니 다. 마지막 으로 시스템 이 신속하게 응답 하지 못 하 는 상황 에서 Rolling FileAppender 순환 기록 로 그 를 사용 하 는 것 을 고려 할 수 있 습 니 다.하 나 는 지정 한 파일 의 최대 길이 입 니 다. 초과 하면 다음 설정 과 같은 파일 을 다시 만 듭 니 다.
- <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="RollingFileAppender_log.txt" />
- <appendToFile value="true" />
- <rollingStyle value="Size" />
- <maxSizeRollBackups value="10" />
- <maximumFileSize value="100KB" />
- <staticLogFileName value="true" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
위의 설정 에서 로그 파일 당 최대 100 KB, 최대 로그 파일 개 수 는 10 으로 생 성 된 로그 파일 이름 은 RollingFileAppender 입 니 다.log.txt.1, RollingFileAppender_log.txt.2 ... RollingFileAppender_log. txt. 10, 기록 한 로그 가 10 개 를 넘 으 면 RollingFileAppenderlog. txt. 1 덮어 쓰기 시작 합 니 다.
날짜 에 따라 로 그 를 기록 하 는 방법 도 있 습 니 다. 설정 은 다음 과 같 습 니 다.
- <appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
- <file value="RollingLogFileAppender_DateFormat_log.txt" />
- <appendToFile value="true" />
- <rollingStyle value="Date" />
- <!--<datePattern value="yyyyMMdd-HHmm" />-->
- <datePattern value="yyyyMMdd" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
이렇게 되면 매일 로 그 를 한 파일 에 기록 합 니 다. 이날 로그 파일 의 이름 은 'RollingLogFileAppender DateFormat log. txt' 입 니 다. 이날 로그 가 아 닌 날 짜 를 가 져 옵 니 다. 예 를 들 어 'RollingLogFileAppender DateFormat log. txt 20101117' 은 2010 년 11 월 17 일 로 그 를 표시 합 니 다. 이렇게 하면 매일 로 그 를 쉽게 나 눌 수 있 습 니 다.앞으로 찾 아 보 는 것 도 상당히 편리 할 것 이다.
설정 에서 로 그 를 사용 하고 닫 습 니 다.
config 파일 에서 로 그 를 편리 하 게 닫 고 사용 할 수 있 습 니 다. 바로 < root > 에서 설정 하 는 것 입 니 다. 다음 과 같은 예 입 니 다.
- <root>
- <!-- -->
- <appender-ref ref="LogFileAppender" />
- <!-- -->
- <appender-ref ref="ConsoleAppender" />
- <!--Windows -->
- <!--<appender-ref ref="EventLogAppender" />-->
- <!--SQLite -->
- <appender-ref ref="AdoNetAppender_SQLite" />
- <!--RollingFileAppender -->
- <appender-ref ref="RollingFileAppender" />
- <!--RollingFileAppender , -->
- <appender-ref ref="RollingLogFileAppender_DateFormat" />
- <!-- ,
- <appender-ref ref="AdoNetAppender_Access" />
- -->
- </root>
위의 예 에서 알 수 있 듯 이 로그 출력 목적 지 를 추가 하려 면 < appender - ref > 노드 를 추가 하면 됩 니 다. 뒤의 ref 는 config 에 설 치 된 appender name 입 니 다. 취소 하려 면 이 줄 을 삭제 하거나 주석 을 달 면 됩 니 다.
Log4Net 사용
우선 config 파일 을 추가 해 야 합 니 다. 라 이브 러 리 항목, 명령 행 프로그램 및 WinForm 에 app. config 를 추가 하고 WebForm 에 웹. config 를 추가 합 니 다.
다음은 WinForm 프로젝트 에서 Log4Net 을 사용 하 는 예 입 니 다.
- using System;
- using System.Collections.Generic;
- using System.Text;
- using log4net;
- using System.Reflection;
-
- // , log4net .config
- // WinForm( MyDemo.exe, MyDemo.exe.config )
- // WebForm, web.config
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- namespace Log4NetDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Random random = new Random();
- for (int i = 0; i < 1; i++)
- {
- //
- //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- ILog log=log4net.LogManager.GetLogger(typeof(Program));
- //
- //log.Error("error", new Exception(" ,Error Number:"+random.Next()));
- //
- //log.Fatal("fatal", new Exception(" ,Exception Id:"+random.Next()));
- //
- //log.Info(" : ");
- //
- //log.Debug(" :debug");
- //
- //log.Warn(" :warn");
- }
- Console.WriteLine(" 。");
- Console.Read();
-
- }
- }
- }
WebForm 에서 도 Log4net 을 사용 할 수 있 습 니 다. 다음은 ASP. NET 에서 Log4Net 을 사용 하 는 예 입 니 다.
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using log4net;
- using System.Reflection;
-
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- Random random = new Random();
- for (int i = 0; i < 1; i++)
- {
- //
- ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- //ILog log = log4net.LogManager.GetLogger(typeof(Program));
- //
- //log.Error("error", new Exception(" ,Error Number:"+random.Next()));
- //
- //log.Fatal("fatal", new Exception(" ,Exception Id:"+random.Next()));
- //
- //log.Info(" : ");
- //
- //log.Debug(" :debug");
- //
- log.Warn(" :warn");
- Response.Write(" 。");
- }
- }
- }
- }
그들의 코드 는 거의 다 르 지 않다 는 것 을 알 수 있다.
다음은 WinForm 아래 config 파일 의 전체 설정 입 니 다. 이 설정 파일 에 사용 되 는 코드 는 위 에서 사용 하 는 코드 입 니 다. LogFileAppender, ConsoleAppender, EventLogAppender, AdoNetAppender 를 사용 합 니 다.SQLite、RollingFileAppender、RollingLogFileAppender_DateFormat 방식 으로 로 그 를 기록 하 는 것 은 모두 로 컬 에서 테스트 를 통과 합 니 다.완전한 config 첨부 파일 을 보십시오.
요약:
이 편 은 주로 이전 Log4Net 에 관 한 미진 한 점 을 보충 하고 일부 친구 들 이 이 블 로그 에 올 린 질문 에 상세 하 게 대답 하 였 으 며, 미진 한 점 이 있 으 면 이 글 에 메 시 지 를 남 겨 주세요.만약 초보 자가 우연히 config 파일 이 무엇 인지 모 르 는 것 을 지나 가면 을 보십시오. 주 소 는: http://zhoufoxcn.blog.51cto.com/792419/166441 입 니 다.
주공
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fortinet FortiWeb Web Application Firewall Policy BypassFrom: Geffrey Velasquez Date: Wed, 2 May 2012 20:33:23 -0500...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.