• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'2014/10'에 해당되는 글 3건

  • 2014.10.23 log4net 코드로 활성화 방법
  • 2014.10.02 HP Workstation xw4600 용 HDD 나사 구함
  • 2014.10.01 Bye Bye 옥션

log4net 코드로 활성화 방법

기술자료/.NET 2014. 10. 23. 17:25

프로젝트를 하다 보니, 자연스럽게 log4net을 사용하게 되었다.
Visual Studio의 IDE 기반으로 된 디버그 기능은 매우 훌륭해서, 브레이크 포인트를 잡고 하는 디버깅을 사용하면 보다 쉽고 편하게 할 수 있지만, 간혹 백그라운드로 동작하는 기능이나, 데이터 흐름의 끊김 없이 쭉 보고자 할 때는 역시 로그 기능은 필수이다.
대개 실행 프로그램 프로젝트( WinForm 프로젝트, 콘솔 프로그램 프로젝트 )의 경우 app.config 라는 XML 기반 설정 파일을 잘 구성해서 넣어주면 log4net을 바로 쓸 수 있다. 설정도 바로 app.config 내에서 수정하면 즉시 즉시 발동되니 편하다.
그런데, 이번 프로젝트는 DLL 기반의 프로젝트로, 해당 DLL은 외부 프로그램에서 Run을 해주게 된다. 이러다 보니, 외부 프로그램에서 log4net을 활성화 시켜주지 않는 이상 내가 만드는 c# dll 안에서는 도무지 로그를 쌓을 수 없었다.

고민 고민하다가, 이전에 만들어 놓았던, log4net용 관리 클래스를 꺼내봤는데, 생각보다 그다지 썩 좋지 않은 방법을 이곳 저곳을 써서 그대로 쓸 수 없었다. 게다가, 설정 기능을 이리저리 끊어놔서 생각보다 쉽지는 않았다.

그래서 아예 Log 기능을 활성화시키는데 주안점을 두고 정리해봤다.

아래의 코드가 log4net을 활성화 시키는 코드들이다.

// log4net의 기본 구조를 꺼낸다.
// log4net의 기본 구조를 꺼낸다.
log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
// log4net의 설정 기능을 활성화 시킨다.
hierarchy.Configured = true;

// log4net을 이용하여 로깅을 할 때, 어떤 방식으로 로그를 남길지를 설정한다.
// 파일, DB, 이벤트로그, 등등 다양한 위치에 로그를 쌓을 수 있는데,
// 아래의 예제는 RollingFile 기반 ( 일정 사이즈가 되거나, 날짜가 변경되면 자동으로 새로운 파일을 생성해서 로그를 
// 남기는 방식 )으로 구현했다.
// 만약 다른 방식으로 변경하려면, rollingAppender의 클래스와 설정을 변경하면 된다.
log4net.Appender.RollingFileAppender rollingAppender = new log4net.Appender.RollingFileAppender();
rollingAppender.File = @"C:\DEV\Log\cupps.log";
rollingAppender.AppendToFile = true;
// RollingFile 방식을 설정한다.
rollingAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Composite;
// 로그 파일 최대 크기를 설정한다.
rollingAppender.MaxFileSize = 1024 * 1024 * 2;
// 로그 파일 작성시, 동시 Write 방지 Locking Model 방식을 설정한다.
rollingAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
// 날짜 변경시 기존 로그 파일이름을 어떤식으로 변경할지에 대해서 설정한다.
rollingAppender.DatePattern = "_yyyyMMdd\".log\"";
// 로그 파일 내에 로그(한 줄)를 어떤식으로 기록할지에 대한 Format을 설정한다.
log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout("%date %-5level %logger - %message%newline");
rollingAppender.Layout = layout;
// 위에서 설정한 Appender 섲렁을 활성화시킨다.
rollingAppender.ActivateOptions();
// Logger에다가 위에서 설정한 Appender를 추가한다.
hierarchy.Root.AddAppender(rollingAppender);
// 여기까지가 Appender 추가 방법.

// 로그를 남기는 레벨 설정 ( INFO, DEBUG, WARN, ERROR, ALL 등이 있다 )
hierarchy.Root.Level = log4net.Core.Level.All;

이 활성화는 프로그램 맨 처음에 한번만 해주면 된다.

로그를 남기려면 클래스 맨 앞에 static 형태로 변수 하나 설정한 뒤, 그 변수를 이용하여 로그를 남기면 된다.
다음 예제 클래스가 그 용도다.

class Class1
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public Class1()
    {
        log.Debug("Enter Constructer~");
    }
}

static을 이용해 log 라는 변수를 생성한 뒤, 로그를 쌓고 싶은 곳에서 log. 이라는 것으로 시작하여 로그를 기록하면 된다. 매 클래스에서 저 static 변수를 모두 넣는 것이 좋다. 그 이유는 로그를 쌓을 때, 어느 클래스에서 발생된 로그인지를 바로 알 수 있기 때문이다.

앞서 로그를 설정할 때, PatternLayout 이라는 값을 설정했다.

 %date %-5level %logger - %message%newline 

이 값들 중, %logger 부분이 로그를 발생시킨 대상을 표시하는 영역이 되는데, %logger 에 들어갈 문장을 "System.Reflection.MethodBase.GetCurrentMethod().DeclaringType"를 통해 넣게 되는 것이다.
그러면 아래와 같은 로그가 쌓이게 된다.

2014-10-23 17:23:11 DEBUG MyApps.Class1 - Enter Constructor ~

"MyApps.Class1" 이라는 부분이 그 부분이다.

귀찮더라도, 매 클래스 마다 아래의 줄을 추가하면 최소한 그 클래스 내부에서 로그를 쌓을 때 편하게 로그를 작성해서 구성할 수 있게 된다.

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

HP Workstation xw4600 용 HDD 나사 구함

잡글 2014. 10. 2. 20:33

지금 HP Workstation xw4600을 사용중인데요.

HDD를 확장하려다 보니, HDD 베이에 결착시켜주는 나사가 부족하네요.
(기본적으로 담긴 4개가.. 전부네요. 그 외의 나사는 ODD연결용.. )

혹시 이런 나사 남는 분?

20141002_201522

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Bye Bye 옥션

잡글 2014. 10. 1. 11:23

이번에 옥션에서 물건을 하나 주문했다가, 가격 표기 오류로 인해 강제 취소되었다.
http://itempage3.auction.co.kr/DetailView.aspx?itemno=A952069614


사실 인터넷 물품을 올리는 작업이 무척 간단하게 되어 있기 때문에, 간혹 "0"이 빠지던가, 아니면 9를 8로 적는 등 사용자 오류가 의외로 종종 발생하곤 한다. 판매자 스스로도 주의 깊게 보면 되겠지만, 사람이니 당연히 이런 오류는 어쩌다 한번씩 발생할 수 있다.

여기까지는 나도 동의하고 이해해준다.
하지만, 최소한 자신이 저지른 실수를 이 물건을 구매하려 했던 손님들에게 넘기는 듯한 행동을 하는 부분에서 도무지 동의할 수 없는 분노가 치밀었다. 결론적으로 옥션에 불만 메시지 남기고, 탈퇴해버렸다.

사실 이 부분은 "상도덕"을 지키며, 자신의 "신뢰"를 중요하게 생각하고, 고객을 "존중"했다면, 아주 간단히 해결될 문제였다고 생각한다. 판매자의 실수는 실수지만, 일방적으로 취소처리가 아닌 각 고객께 양해의 글을 전달하고, 시스템에서 자동으로 뿌리는 메시지가 아닌, 진심 어린 사과를 보내던가, 아니면 다른 물건으로 사죄를 요청해야 한다. 분명 실수라도 자신이 올린 글에 대한 책임은 지어야 하지 않을까?

여기에 결정적으로 판매자와 손님간의 댓글 놀이도 아주 가관이였다.

"고객님 좋은 정보 감사합니다" <- 이건 뭐 하자는 건지...

상호간의 신뢰를 한번에 무너뜨리는 한마디 같았다.
이 결과, 이런 판매자에 대한 질책이나 별도 사과는 없이, 기계적인 취소 공지 식의 메일만 도착.

이런 판매자의 행위를 옥션도 한팔 거들 뿐.

G마켓이든, 11번가든, 인터파크 든, 다들 대응이 비슷하겠지만, 지금 내 눈에 띈 것은 옥션이였고, 그간 조금 비싸든 말든 계속 같이 거래하며 나름 신뢰감을 가지고 이용해 왔는데, 아주 뒤통수 맞은 듯한 느낌에, 결국 나의 시야에서 버려 버렸다. 뭐 소송이나 이런 적극적이면서 귀찮고 짜증나는 일은 하지 않을 것이다. 그냥 눈 돌리고, 이렇게 소극적인 불만을 제기하고 기록할 뿐. 어차피 어마어마한 수의 회원수를 보유하고 계신 옥션이시니, 나하나쯤 회원 해지 신청했다고 티는 안나겠지만, 얼마가 더 싸게 물건이 나오든 말든 이제 더 이상의 "옥션"은 내 이후 구매 이력에서는 없어질 회사다.

결론적으로 내가 필요로 했던 것은 "상도덕"과 "신뢰" 그리고 나에게 대한 "존중" 이 세가지다.
일단 일방적인 취소로 "상도덕"과 "신뢰"는 저버린지 오래고, 고객에 대한 진정한 사과없이, 시스템이 기계적으로 내린 사과가 고작인 이런 곳에서 나에게 대한 "존중"이 있었을까?

자존심으로 손해 보겠네, 뭘 이런거 가지고 이러나 싶기도 하지만, "신뢰"는 상호간 지켜야 될 약속. 약속은 돈 몇 푼 때문에, 이리 저리 휩쓸리는 것이 아닌 아주 중요하고 꼭 필요한 인간관계, 상호관계라고 생각이 되고, 내 나름대로의 규칙이기 때문이다.

판매자도, 중계자도 어차피 그 사이 사이 마진을 통해 이익을 먹고 살고 있는 입장이니, 이런 책임에서 벗어나려 해서는 절대 안된다고 생각된다.

Bye Bye 옥션

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2014/10   »
일 월 화 수 목 금 토
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

java 좀 MOSS 2007 SharePoint 인터파크 수 것 Visual Studio me2dayzm 2010 개발환경 오류 me2sms Azure windows WSS e-book 협업 twi2me 비스킷 불만 Buscuit 지름신 블로그 Tutorial moss 매뉴얼 me2photo 친구 Google Apps Engine

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바