유닉스쪽 프로그래밍을 볼일이 있어서 살펴보던중 syslog 함수로 간편하게 로그를 남기는 것이 눈에 띄었다.
기본적으로 리눅스 시스탬의 /var/log/message 에 가서 붙는다고 하고 로그 경로는 openlog 함수를 이용해서 조절하는것 같다.
윈도우쪽에서는 이런걸 지원해 주는걸 본적이 없어서 비슷한게 없을까 해서 msdn(CD로 설치한거)에 syslog.h 로 검색을 하니… 이럴수가 UNIX Application Migration Guide 라는 섹션이 나오는것이 아닌가.. 으음 MSDN.. 괜히 용량만 큰게 아니라는걸 느꼈다.
어쨌거나 MSDN을 보니 그런 역할을 하는것으로 EVENT Viewr 를 소개해놨다.
유닉스소스
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen(“Bad_File_Name”,”r”);
if(!fp)
syslog(LOG_INFO|LOG_USER,”error – %m\n”);
exit(0);
}[/CODE]
와 이벤트뷰어를 사용하는 윈도우코드를 비교하면
윈도우소스
#include <stdlib.h>
void main()
{
HANDLE h;
LPSTR mstr = “This is an error from my sample app.”;
h = RegisterEventSource(NULL, // uses local computer
TEXT(“BILLSamplApp”)); // source name
if (h == NULL)
exit(1);
ReportEvent(h, // event log handle
EVENTLOG_ERROR_TYPE, // event type
0, // category zero
0, // event identifier
NULL, // no user security identifier
1, // one substitution string
0, // no data
(LPCSTR*)&mstr, // pointer to string array
NULL); // pointer to data
DeregisterEventSource(h);
exit(0);
}[/CODE]
이렇다.
결과는 유닉스의 경우는 위에서 말한대로 보통 /var/log/message 의 뒤에 붙게 되며 이건 openlog 함수를 통해서 수정할수 있다.
윈도우의 경우는 제어판 -> 관리도구 -> 이벤트 뷰어 를 통해서 결과를 확인할수 있다. (이벤트뷰어의 응용프로그램쪽에서 확인할수 있을듯)
개인적으로 볼때는 유닉스쪽이 좀더 편할 뿐만아니라 간결하기 까지 하다.
윈도우의 경우는 모든 응용프로그램 이벤트가 하나로 모이기 때문에 하나의 어플리케이션에서 아주 자세한 로깅이나 디버깅 목적으로 저걸 쓰기는 안좋은것 같다.
현재 문서를 좀 뒤져보니 저 응용프로그램, 보안, 시스탬 같은 카테고리를 생성할수 있는듯 하기는 한데 소스 코드가 꽤나 복잡하다.
이 부분은 나중에 한번 살펴보기로 하자..
ps. 이벤트로그는 NT이상에서만 사용할수 있다.
쩝…95/98이 아직도 돌아가는한 이런건 적용시키기가 무척 껄끄럽다.