Software Architect/C#

출처 : http://loveev.tistory.com/15

.NET Application 을 이용해서 새로운 프로젝트를 만들때마다 프로그램 로그를
기록할 괜찮은 Library가 없어 매번 방황하거나 간단하게 Trace나 FileInfo로 열어서 쌓는 수준으로만 해왔다.
좀 찾아보다가 Log4Net 이란 것을 발견했다.(지인의 소개로 발견 ^^;;)
간단한 형식으로 빠르게 FileInfo 를 열어서 파일에 기록하면 시간은 단축할 수 있다.
그러나 매번 잊어먹는 Syntax찾아가며 새로 작성하기란 여간 힘든 일이 아니다.
더군다나 멀티 스레드 동기화 까지 하라고 하면 하다가 GG 치는 경우가 많다.
이 Log4Net은 파일로도 쓰고 
Database에도 쌓고
여타 다른 매체에도 손쉽게 설정만 해주면 사용가능한 유용한 Library이다.
물론 Thread Safe 하게 작성되어졌으리라 믿어 의심치 않는다.(믿는 도끼에 발등...)

Log4Net 의 간단한 History 나 Log4J 에 관한 상세 내용은 링크 사이트를 참조하길 바란다.

간단하게 파일과 MS SQL Server 에 Log를 쌓는 예제를 .NET C#을 이용해 작성해보았다.

1. 예제환경
- OS: Microsoft Windows XP Professional Version 2002 Service Pack 2( 길다..-_-;)
- IDE: Microsoft Visual Studio 2005 Professional Edition
- Language: C#
- .NET Framework v2.0.50727
- MS-SQL 2000

2. Log4Net Download
여기에서 다운로드 받은 다음에 압축을 푼다.

3. Log4Net 을 이용한 간단한 로그 쓰기 예제(Console, 파일, Database)
 3.1 Project 생성 ( C# 프로젝트 간단하게 Console 이나 Windows Application 으로 생성)

 3.2 Add Reference
      - download 받은 Log4Net 안에서 log4net-x.x.xx\bin\net\ 에 들어가서 적당한 버전
        선택 후 log4net.dll, log4net.pdb 를 복사한 다음 프로젝트 Root에 넣고 IDE 에서 
        Add Reference 를 한다.
        (Add Reference를 할때 Browse Tab 에서 Dll을 직접 선택하면 된다.)

 3.3 Log4Net configuration File
      - 설정파일(.xml)은 프로젝트에 Root에 넣어두면 Build 될때 Bin\Debug or Release 
         밑으로 자동 복사된다.
      - 공용으로 쓰기위해 어디에다가 위치시켜도 좋지만 편의를 위해서 .exe 가 
         Project Root에 두면 상대경로 지정이 가능하기에 편의상 프로젝트 Root에 두었다.
      - 첨부된 예제의 설정파일에 보면 <appender>...</appender> 가 3개 존재 한다.
      - 각각이 차례대로 Console, File, Database를 쓰는 예제이다.
      - 주의 사항
         1. 설정파일의 맨 마지막 하단에 작성한 appender-ref 를 추가하는 것을 잊으면 
             안된다. 빠뜨려서 동작하지 않는 경우가 발생한다.
         2. Database 부분의 Appender가 있는데 bufferSize를 통상 100으로 된 곳도 있는데 
             그렇게 하면 100라인이 될때까지 로그를 쓰지 않아 동작하지 않는다고 오해한다. 
             1로 고치면 해결된다.
         3. 현재 자신의 .Net Framework 버전이 1.1 인지 2.0인지에 따라서 Database 
            appender에 <connectionType> 에 value 정보의 Version 정보를 정확히 
            기재해주어야한다. 그렇지 않으면 이 역시 오동작을 하게 될 것이다.
            SqlConnection 의 버전 정보를 읽어오는 방법은 다음과 같이 잠시 써서
            AssemblyName을 얻으면 Version 정보도 포함되어 있으니 확인가능하다. 
            
            ----- AssemblyName 버전 확인 방법 ----
            SqlConnection sq = new SqlConnection();
            sq.ConnectionString = "";
            Assembly asm = Assembly.GetAssembly(sq.GetType());
            AssemblyName asmName = asm.GetName();
            

          4. Database에 Table은 Log 라는 Table 명으로 미리 만들어 둔다.
            CREATE TABLE [Log2] (
                  [Id] [int] IDENTITY (1, 1) NOT NULL ,
                  [Date] [datetime] NOT NULL ,
                  [Thread] [varchar] (255) NOT NULL ,
                  [Level] [varchar] (50) NOT NULL ,
                  [Logger] [varchar] (255) NOT NULL ,
                  [Message] [varchar] (4000) NOT NULL ,
                  [Exception] [varchar] (2000) NULL 
            ) ON [PRIMARY]
            GO

          5. Log Level 은 appender-ref 가 있는 <root> 부분에 있으니 설정하면 설정한 
             로그레벨 이상만 출력이 될것이다. 
             DEBUG < INFORMATION < WARNING < ERROR < FATAL 순서이다. 

 Form1.cs

예제로 작성된 Source 파일

                                 < 예제로 작성된 .cs를 참고 하자 > 

                                 < 예제로 작성된 설정파일을 참고 하자 > 
                              

손쉬운 프로그램 로그 Library로 Log Library 작성하는 삽질은 피해보자.


신고
0 0