log file format 조건 Linux/C/C++ 2012. 10. 19. 17:40

이번에 어떤 작업을 하면서 
개인적으로 가지고 있던 로그 클래스를 엎었습니다.
지난번에 만들때는 잘 만들었다고 생각했는데 다시 보니 너무 조악하더군요.

다신 만든건 문제가 없는데, 만들다가 느낀게... 별로 대단한 것도 아닌데
프로그래머마다 각자 자기 맘대로 하나씩 가지고 있는 것 같은 느낌이 들더군요,

제대로된 로그 라이브러리가 있으면 그냥 익혀서 쓰면 되는데
또 만든다고 생각하니 시간 낭비 같기도 하고.


일단 개인적으로 필요로 하는 로그 요구 조건은
(1) c++ 클래스 형태로 만들어져 변수가 함수 밖에 보이지 않을 것
(2) win32 함수만 사용해서 다른 의존성 없을 것
     (MFC쓰면 버젼 의존성 발생해서 라이브러리로는 좋지 않음. 그런이유로 VC60 쓰는 회사가 꽤 많음)
(3) 오픈함수open /클로즈 함수 close /출력 함수 print 는 필수
(4) 오픈 함수에서 파일의 생성 유무를 선택할 수 있도록 파라메터 지원 
     (개발자는 필요하지만 사용자는 절대 필요없으므로. 더미 로그를 사용자 PC에 매일 수 메가씩 만든다고 생각라면 끔찍)
(5) 파일을 쓸 폴더가 존재하지 않을 경우 강제로 폴더 만들어 줄 것
(6) 지정한 파일명에 로그 생성 시각을 강제로 포함시켜서 생성할 것
    (같은 이름으로 로그 파일을 만들면 실환경에서 곤란한 상황 벌어짐)  => splitpath 함수 이용하면 구현 가능
(7) 파일에만 출력할 것이 아니라 DebugView.exe도 볼 수 있도록 OutputDebugString도 지원
(8) 출력함수print는 가변인수 지원. 
    (가변인수 지원안하면 알고리즘 코드외에 로그 문장 조합을 위한 불필요한 코드가 생김)
(9) 출력함수print는 매크로로 되어 있어서 __FUNCTION__과 __LINE__을 자동으로 추가해 줄 것
(10) 유니코드 지원

대충 이정도인데, 
로그 출력이 그냥 파일에 텍스트 뿌려대는 것 같지만 실제로 사용하려면 생각보다 까다로운 조건이 많이 붙네요.

네이버나 구글에서 다른 프로그래머가 만든 코드 찾아보면
(1)(3)(7)(8)(9)는 대부분 만족하는데
(2)(4)(5)(6)(10)은 크게 고려되지 않는 것 같네요.
실제 좀 복잡한 상용 제품에 쓸려면 더 복잡해야 할테고.

이번에 새로 구현한 함수 3개
    void OpenFile(LPCWSTR pwszPath, const EN_LVS_KIND enLvsKind);
    void Print(EN_LV_KIND enLvKind, LPWSTR pwszFunction, int nLine, LPWSTR pwszFormat, ...);
    void CloseFile(void);

요약>
좋은 로그 라이브러리 있으면 소개 좀... ^^;