2019년 6월 18일 화요일

Log4J를 활용한 로그 관리 방법 (C#, Visual Studio환경, 텍스트 파일) - Log management method using Log4J In C#

로그는 프로그램 코딩부터 운영까지 반드시 필요한 부분이지만 로그를 분류하고, 별도의 텍스트 파일에 로그를 저장하거나 로그 파일들을 관리하는건 상당히 귀찮은 부분이기도 합니다. ^^;;

이럴 땐 시간을 내서 자신에게 맞는 로그 관리 유틸을 만들어 사용하는게 최고이긴 하지만 아직 이런 도구가 없으시다면 아주 쉽게 적용 가능한 범용적인 로그 관리 유틸리티인 Log4J를 소개합니다.

Log4J는 아파치 소프트웨어 제단에서 발표한 자바 기반의 로깅 유틸리티로서 처음엔 자바 디버깅에 사용되었다가 점점 심플하면서도 체계적인 로그 관리에 매료된 사용자가 늘어감에 따라 다른 프레임워크로 포팅이 되어 이제는 왠만한 메이저 언어에서도 쉽게 사용 할 수 있는 유틸리티로 발전 되었습니다.


(출처 - 위키백과 : https://ko.wikipedia.org/wiki/Log4j)

이번 포스팅 대상은 C#이니 닷넷 프레임워크에 대응하는 Log4net을 사용해 보겠습니다.


1. Visual Studio에서 작업을 할 프로젝트를 생성합니다.

프로젝트는 어떤거든 상관없으나 가장 많이 사용하는 윈폼으로 만들었습니다.


2. Log4net.dll를 직접 참조 시켜서 적용해도 괜찮지만 VS 환경에선 편리하게 너겟을 이용하여 설치도 가능합니다.

도구 - NuGet 패키지 관리자 - 솔루션용 NuGet 패키지 관리에 들어가서


3. Log4로 검색한 뒤, log4net을


4. 적용할 프로젝트에 체크한 뒤 설치를 합니다.


확인을 해주면


요렇게 간단히 Log4net 설치가 완료 되죠.


너겟은 이렇게 환경까지 다 맞춰주니 매우 편리합니다. ^^


5. 이제 로그 관리를 위해 xml 파일 하나를 만들어 줍니다.

프로그램이 읽을 수 있는 아무 위치에다 xml 파일을 하나 생성하는데 파일의 이름은 log4net.xml만 피하시면 됩니다.

저는 파일 이름을 logManager.xml로 했어요.


xml 파일이 생성되면 이렇게 텅 비어 있을껀데요.


6. 여기에 위 그림과 같이 로그 관리를 위한 태그를 추가합니다.

이 태그들은 log4J의 공통적인 명령어들로 이루어져 있는데요.

우선 #3 ~ #12까지는 로그 파일의 종류과 관리에 대한 내용이며
#14 ~ #17은 로그의 단계에 관한 내용입니다.

#3부터 설명을 하면

#03 : 로그 파일은 일정 크기를 넘으면 가장 오래된 내용을 삭제하는 방식으로 관리함
#04 : 로그 파일의 이름은 logTest.txt로 함
#05 : 로그 파일 유지
#06 : 일정 크기를 넘었을때 가장 오래된 내용이 파일이라도 삭제하겠음
#07 : 로그 파일 관리 단위는 파일 크기로 함
#08 : 최대로 백업할 로그 파일의 갯수 = 10개
#09 : 로그 파일 최대 크기 = 1MB
#10 : 로그 패턴
#11 : 로그가 작성될 시간 - 로그내용 NewLine
#15 : 로그 파일에 기록할 로그 범위 = 디버깅 수준까지

로 설명이 되어집니다.

따라서 이 프로젝트의 로그 파일들은 로그 앞에 로그가 생성된 시간도 함께 작성하면서 최대 1MB의 크기로 제한하고 만약 1MB를 넘길시엔 기본 파일은 백업 파일로 변경하고 새 로그 파일에 다시 작성한다.

그리고 백업 파일이 10개가 넘을 경우 가장 오래된 파일을 삭제하고 새 로그 파일을 작성하겠다는 뜻 입니다. ^^

번거롭지 않도록 해당 파일의 다운 링크를 제공할께요 => XML 파일 다운로드 링크



7. 로그 관리 파일을 프로그램이 읽을 수 있도록 복사 옵션도 추가해주면 편합니다. ^^

로그 관리가 다 되었으니 이제 소스로 가볼까요.


8. log4net관련 소스를 참조할 수 있도록 참조를 추가한 뒤


9. 로그를 로드할 위치에 위와 같은 소스 코드를 작성합니다.

저는 윈폼이고 폼 시작과 함께 로그를 로드하고 싶어서 이렇게 했습니다.

#24는 위에서 추가했던 로그 관리 파일을 로그 하기 위함이고
#25는 로그의 로드 위치를 지정하였습니다.

#26 ~ #29까지는 로그가 시작된 시점을 로그 파일에다 작성하고 싶어 만들었습니다.


10. 이제 본격적으로 원하는 곳에 로그를 남깁니다.

log4J의 로그는 총 6단계로 낮은 단계부터

FATAL - ERROR - WARN - INFO - DEBUG - TRACE 로 이루어져 있으며

로그 관리 파일에서 지정한 로그 등급 이상의 로그만 로그 파일에 저장합니다.

저는 로그 등급을 DEBUG로 했으니 TRACE를 제외한 모든 로그들이 파일에다 작성되겠죠 ^^

로그를 작성하는 방법은 ILog.Debug(로그내용); 으로 합니다.

FATAL 등급으로 남기고 싶으면 ILog.Fatal(), ERROR 등급은 ILog.Error() 이런식이죠.

위 소스에서는 프로그램 시작과 종료 이벤트 때 로그를 남기도록 했는데요.


11. 빌드를 하고 프로그램을 실행하면


지금쯤 로그가 작성되었겠죠? ^ㅡㅡ^

프로그램을 종료하고 실행 환경으로 가보면


12. 짜잔~ 따끈따끈한 로그 파일이 생성되었습니다. ㅎㅎ


로그내용도 지정했던 (시간 - 내용) 형식으로 되어 있고, 제가 작성했던 로그들 모두 잘 들어가 있네요.


그리고 자동으로 log4net.xml 파일도 생성되었는데 이 파일에서는


로그 관리 태그의 모든 명령어와 설명이 들어 있습니다.

제가 작성했던 내용도 여기 있는 태그 중 아주 일부만 가져온거죠.

보시면 단순히 텍스트 파일에 로그를 작성하는 기능 외에도 DB 연동을 위한 스키마 내용이나


연동 방법들이 있고

쭉 내려가 보면


제가 사용한 부분도 찾을 수 있습니다.

로그 작성은 해봤으니 이제 마지막으로 로그 파일의 백업이 어떻게 되는지 확인해 볼까요?


13. 일단 로그 파일의 용량을 늘려야 하니 타이머 하나를 생성해서


타이머 이벤트에


연속된 정수를 계속 찍도록 해봤습니다.


그리고 실행하면


이쁘게 작성되고 있네요 ^^.


요즘 재미붙인 움짤로 로그 쌓이는걸 만들어 봤습니다. ㅎㅎㅎㅎ

이렇게 로그가 쌓여서 제가 지정했던 용량 1MB를 넘어가면


14. 짜잔~ txt.1이란 확장자로 저장이 되었네요.


메모장으로 열어보니


시작과


끝 모두 이쁘게 잘 저장되어 있으며


새로운 로그 파일도 이어서 잘 저장된 모습을 확인 할 수 있습니다. ^^

이로써 C#에서 Log4J를 활용한 로그 유틸리티 적용 방법에 대한 설명을 마치겠습니다.

한 분이라도 도움이 되었으면 좋겠네요.

마지막으로 포스팅의 예제가 되었던 프로젝트도 공유할께요.

귀찮으시면 프로젝트를 그대로 사용하셔도 될꺼 같습니다.

샘플 프로젝트 다운로드 링크 = 다운로드

읽어 주셔서 감사합니다!
Share:

댓글 2개:

  1. 어려울 거라 생각했는데 너무 쉽게 설명해주셔서 잘 배웠습니다.
    -혹시나 다른 분들 헷갈릴까봐.
    아래에서 logManager.xml로 바꾸셔야 합니다.
    XmlConfigurator.Configure(new System.IO.FileInfo("logconfig.xml"));

    답글삭제
  2. 덕분에 잘 활용했습니다! 감사합니다:)
    혹시 질문이 하나 있는데요,,
    저장되는 파일 제목에 현재 시각을 넣어서 저장하고 싶은데
    ("2024-03-14_logfile.txt) 이런 식으로요.
    혹시 logManager.xml 파일에서 어떻게 수정하면 되는지 알려주실 있으실까요?

    답글삭제