[완료] 한개의 파일에 n개의 프로세스가 로그 작성하기.
글쓴이: mauri / 작성시간: 월, 2009/01/12 - 9:51오전
안녕하세요... __);
윈도우 서버에서 돌아가는 n개의 프로세스의 로그를 파일 하나에!! 작성해야 합니다.
(현재는 프로세스가 2개이지만 최대 4개까지 확장될듯 싶군요.)
이 로그 작성부를 DLL로 작성해서 제공해 주기로 했습니다.
작성하고 보니 로그가 빈번한지라..
중간에 깨지거나 아예 로그가 날아가버리는 문제가 발생하더군요.. ㅇㅅㅇ);;;;
그래서 락을 걸자! 라고 생각을 해서 DLL 내부에서 뮤텍스를 설정해서 걸어놓으니
아차!! 메모리가 공유될리가 만무하니.. 락이 걸리지가 않더군요.
이거 어떻게 해야 해결이 가능할까요?
아시는 분은 답변이나 링크라도 좀 부탁드립니다... __);
그럼 즐프되십시요~
Forums:
msgq를 써서 msgq에
msgq를 써서 msgq에 n개의 프로세서들이 로그를 남기도록 하고..
한개의 프로세서는 msgq를 읽어서 파일에 저장하는 구조면 간단할듯 합니다만????
時日也放聲大哭
時日也放聲大哭
DLL로 제공을 하기 때문에요..
DllMain()에서 지정된 로그 파일명으로 파일을 공유모드로 엽니다.
CreateFile(szFilePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
각각의 프로세스에 DLL이 로드될때 DllMain을 달리게 되니, 여는것까지는 문제가 없습니다.
이 다음이 문제인건데요..
만일 DLL내에 메시지 큐를 줘봐야.. 각각의 프로세스에 로드될때 각각 메시지 큐를 가지게 되고..
큐에 로그가 들어오면 서로 쓰기 작업이 이루어지기 때문에 별다른 차이가 없을 듯 싶습니다.
제 생각에는...
제 생각에는 DLL 외 어떤 윈도우를 가진 모니터 프로세스가 하나 있음 괜찬을꺼 같은데요.
모니터 프로세스가 기동할때 창조한 윈도우 핸들을 dll에 넘겨주고요.
dll에서는 로그 버퍼를 세팅하고 메시지를 큐에 보내고...
이런 식으로 함 안될까요?
많이 많이 배워주세요.
제가 얘기한건 IPC의
제가 얘기한건 IPC의 메세지 큐입니다. 윈도우즈에서 IPC를 사용해 보지 않아서, 잘 모르겠지만...
IPC상의 메세지큐라면, 하나의 메세지큐에 여러 프로세스가 메세지를 쌓고, 한개의 프로세스는 메세지큐에서 읽어서, 로그파일을 쓰기 모드로 열고, 기록하는것에 문제가 없다는 것입니다.
각각의 DLL이 로드될때마다 메세지큐를 생성하는 것이 아니라, 하나의 메세지큐를 프로세스간에 공유하는 것을 얘기한겁니다.
時日也放聲大哭
時日也放聲大哭
File Lock을 쓰는건
File Lock을 쓰는건 어떤가요?
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
흙.. 죄송합니다.
흰건 배경이고 검정은 영어라는것 외에는 모르겠습니다.;;
ㅠ.ㅠ);;
프로세스간 락킹을 하는 세마포어를...
프로세스간 락킹이 가능한 세마포어를 쓰지 못하는 이유가 있나요?
뮤텍스 대신에 세마포어를 쓰면 될 것 같은데....
답변 감사드립니다..__);
삽질만 진장하고 있다가 님의 조언에 정신차렸습니다.
답변 감사드립니다.. ^^
꼼수로 각 프로세스
꼼수로 각 프로세스 로그에 Time Stamp 포함시켜서
나중에 결합하는건 안되나요 하하;;;
관심가져주신 분들 모두 감사드립니다.
혼란스럽게 해 드려서 죄송합니다.
그러고 보니 윈도우에서 뮤텍스를 써서 프로세스간 배타영역 생성이 안될리가 만무했습니다.. ㅠㅠ;;
파일이 깨지거나 로그가 날아가는 원인은 파일 포인터였습니다.
즉...
00001 20090101 110012 로그 어쩌고 저쩌고
(FP A)
(FP B)
이 상태에서 프로세스 A가 로그를 작성합니다.
00001 2009/01/01 11:00:12.100 로그 어쩌고 저쩌고
(FP B)
00002 2009/01/01 11:00:12.110 로그 어쩌고 저쩌고
(FP A)
ㄴ이렇게 되면 프로세스 B의 포인터는 그대로이고, B가 로그를 작성하게 되면..
00001 2009/01/01 11:00:12.100 로그 어쩌고 저쩌고 00003 2009/01/01 11:00:12.120 로그 어쩌고 저쩌고 (FP B) (FP A)
이렇게 되어버리니 로그가 사라지거나 깨지는 것처럼 보이는 것이었습니다.. __);
답변주신 모든분들 감사드립니다.. __);
댓글 달기