wiki:Requirements/Logging

1차

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
1. 버퍼링
2. 다중 아웃풋 [될거 같고]
3. 캐릭터 인코딩
4. 로깅 시간 [당연한거고]
5. 프리픽스 [오류 타입]
6. 스레드 세이프 [될거 같고]
....3번이 귀찮을거 같고
1번은 당장 떠오르는게 없네요 음
혹시
stdout 처럼
버퍼에 있다가 
훅 쓰는
그런걸 말씀하시는건가요?

김락현([락현]) 님의 말 :
ㅇ
걍 내부 버퍼를 가지고 있는 거지.
api셋팅으로 할수 있고..
1m를 가지고 있으면...
계속 쌓다가 1m가 다 차면 파일에 write.
파일 io를 줄이니 성능을 높일 수 있지

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
사이즈 체크를
어떻게 하느냐가..
관건이네요 음

김락현([락현]) 님의 말 :
다만 로그의 특성상 아까 말했듯이 api를 call하는 시점에 반드시 기록할수도 있는 거고.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
허흠
이런 경우가 좀 고민스러운데
stl::vector 같은거 쓰면 메모리가 알아서 관리되니 좋지만..
직접 만들면
용량이 얼마나 더 들어올지 알 수가 없으니
만들기가 좀 골아프더라구요

김락현([락현]) 님의 말 :
용량이 얼마나 더 들어올지?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
그러니까
로그 버퍼를 예로 들면
1M 가 이상되면 쓸건데.
1mb 이상 을 받아야 하니

김락현([락현]) 님의 말 :
초기 입력값으로 받는 거지~

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
1.1mb 를 버퍼로 잡아놨는데
음?
음
몇 이상되면 써라 이런거요?

김락현([락현]) 님의 말 :
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
네 그렇게 해도 고민인게;
여유 공간을
얼마나 잡아야 하는건지;

김락현([락현]) 님의 말 :
음?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
1MB 이상되면 써라

김락현([락현]) 님의 말 :
1M를 크리고 잡았다면

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
라고 설정을 해놨는데
1MB 넘게....
아

김락현([락현]) 님의 말 :
1M가 넘어가는 시점에 쉬프트 시켜주면 되는 거얌

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
들어온거 포함해서 1메가 넘으면 지금 들어온거 받지말고, 파일에 쓰고나서 들어온걸 버퍼에 푸쉬하는
아...이렇게 해도 되겠구나

김락현([락현]) 님의 말 :
음 그런거지 
편하게.. 1000이라는 사이즈가 버퍼크기라면..
보통 입력으로 10~30으로 온다 치고( 물론 한계는 없고)
현재 버퍼의 크기가 998이고
10이 들어오면
998+2 만큼 기록하고
8이 다시 버퍼의 젤 처음이 되는 거야
내가 생각한건 이런 식임.. -_-

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
length를 가지고 있으면
out (buffer + length, formatted-string, arg1, ...)
이런식으로 해도 될건 같은데
근데 10이 들어오면 왜 +2 인가요?

김락현([락현]) 님의 말 :
버퍼크기가 1000이고 현재 998만큼 기록되어 있으니
블록 단위로 기록하기 위해서 +2만큼 더 기록해 주는 거지...
보통 버퍼링을 할때는.... 하드의 클러스터 단위인 1024KB(또는 그의 배수나 약수)를 기준으로 버퍼 크기를 잡고..
block단위로 i/o를 발생시켜 주는게 최고의 성능을 낼수 있어.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아 현재 버퍼의 크기가 998 이고 
이게
지금 남은 버퍼가 998 이라는 말씀이신줄 ㅋㅋ
지금 버퍼에 들어있는 데이터의 크기가 998이라는 말씀이셨군요

김락현([락현]) 님의 말 :
아 998만큼 차 있다고~
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음음 적어놔야지

김락현([락현]) 님의 말 :
음음? 별거 아닌건데~ -_-

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
근데
1024kb 가
클러스터 단위예요?
1메가네;
클러스터가 꽤 크네요;

김락현([락현]) 님의 말 :
더 작지~

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

김락현([락현]) 님의 말 :
256이여던가..
까먹었어

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
2 진수의 배우소
배수로
만들라는
말씀이신듯
2^8 이상의 배수로 만들면
되겠네요 으헤헤

김락현([락현]) 님의 말 :
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
캐릭터 인코딩은..
음

김락현([락현]) 님의 말 :
파일 등록 정보 볼때 파일 사이즈랑 디스크 할당 크기를 보면 알수 있는데

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
찾아야겠네요

김락현([락현]) 님의 말 :
4k네

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
근데 캐릭터 인코딩하면
버퍼 동적할당으로 새로 잡고 
인코딩바꾸고
쓰고 하면
속도는 당연히 

김락현([락현]) 님의 말 :
응 귀찮겠다

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
배이상 느려지겠죠 음

김락현([락현]) 님의 말 :
하지말자
걍 multibyte로 입력.
char 버퍼로 입력받고..
사이즈랑 메모리 받아서
사이즈만큼 메모리 기록.
쿨하고 좋다.

2차

김락현([락현]) 님의 말 :
뭐가 문제임?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아
그
말씀해주셨떤거 중에..
파일 시스템 블록 단위로 쓰는게 
퍼포먼스가 가장 좋다고 하셨잖아요

김락현([락현]) 님의 말 :
ㅇㅇ 그렇쥐.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
근데 사용자가 버퍼 사이즈를 파일 시스템 블록 배수로 안맞춰서 넣는 경우는
사용자 버퍼 사이즈만큼 찼을 때 쓰나요
클러스터 배수가 되면 쓰나요??

김락현([락현]) 님의 말 :
사용자의 버퍼사이즈~

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
그렇게 되면
파일 시스템 블록사이즈는
구현 물 상에서는
고려하지 않게 되는건데..

김락현([락현]) 님의 말 :
응 맞어.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
으앜

김락현([락현]) 님의 말 :
쓰는 사람이 잘 써야해

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
ㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋ

김락현([락현]) 님의 말 :
이건 뭐랄까 개발의 정책에 관련된 문제인데...
라이브러리를 개발하는 거자나?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
넹

김락현([락현]) 님의 말 :
물론 내가 만들어 내가 쓰는 거긴 하지만..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
라이브러리는 쓰는 놈이 어느정도 커버 쳐가면서 써야하는건 맞는거 같은데..

김락현([락현]) 님의 말 :
기본적으로는 내가 모르는 사람이 쓴다고 가정했을때...

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
넴

김락현([락현]) 님의 말 :
분명히 파라메터로 값을 명시하고 있으니..
라이브러리는 시킨대로 하는게 맞지 않을까?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
흠 퍼포먼스는 올리고 싶은데
그렇다고 로그 모듈에서 파일 시스템 블록 사이즈를 알 수 있는 인터페이스를 뚫는 것도 좀..
이상한거 같고
 ㅋㅋ

김락현([락현]) 님의 말 :
물론 ceiling( 니가 인풋한 사이즈, 2^n)의 형태로 버퍼링 하는 것도 가능하지.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
??
그게 머에요??

김락현([락현]) 님의 말 :
하지만 나의 관점은... 개발의 복잡도(스팩을 비롯하여.. )를 너무 높히는 것은 정신건강에 매우 안좋음..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
첨엔
사용자가 지정한 버퍼 이내에서 
가장 큰 
블록 사이즈의 배수
만큼 쓰려고 했는데
그것도 좀...
이상한거 같고 해서

김락현([락현]) 님의 말 :
ㅇㅇ 
만약 그렇게 하려면... 그렇게 할지 말지 여부를 별도 비트 플래그 옵션등으로 받아야 하지 않을까 싶어.
내 기준엔.
졸라 복잡하자나?
안그래도 머리 아픈 세상인데.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
그럼
비트플래그로
만들 때
버퍼를
내가 지정한 값 이내에서 가장 큰 버퍼 사이즈를 찾으세요
라고
?
하면되나요
내가 제시한 값 이내에서 가장 큰 블록 사이즈의 배수를 버퍼로 잡아라

김락현([락현]) 님의 말 :
응 그렇게 하는게 스팩상으로는 명확하나..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
라고..

김락현([락현]) 님의 말 :
나같음 안해

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
ㅋㅋㅋ
구현은

김락현([락현]) 님의 말 :
걍 입력한 값으로 버퍼링 하지.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
안어려운데
이상하네요 뭔가
음
결국
퍼포먼스 따윈

김락현([락현]) 님의 말 :
니가 버퍼링에 관한 지식이 있는 개발자야..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
밥말아 먹는건가

김락현([락현]) 님의 말 :
당연히 그렇게 사이즈를 주지 않겠니?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
.....그..그렇겠죠?
음

김락현([락현]) 님의 말 :
나 같으면 차라리 default사이즈로 해라라는 옵션을 줘서..
그럴때만 개발자 기준의 최선의 사이즈를 구하겠어.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
디폴트도 생각해 봤는데요
시스템 스펙이나 여유 리소스가 얼마나 있는지 모르는 상태에서
내 맘대로 몇배나 잡을지도 참
기준이 애매한거 같아서..

김락현([락현]) 님의 말 :
128K /

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아
음

김락현([락현]) 님의 말 :
아니면 256K정도?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
머드라
win32가
cluster default size가
4096 바이트였나
그렇던데
4k

김락현([락현]) 님의 말 :
응
버퍼사이즈 mod 4k가 0인...
버퍼사이즈를 구하면 되자나
그리고 당연히 클수록 좋은 거구...

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그렇죠..
음
128k 면
128 * 1024
12만인데 대충
12만 글자가 차야
쓰는거네요
그렇게 보니 디게 많아보이네

김락현([락현]) 님의 말 :
로그의 특성상.. 적절한 flush가 필요하다고 생각해야 하는게 중론이야..
사용자가 이건 실시간의 필요성으 없다 판단되는 로그면 1M이상 막 넣는거고..
이건 졸라 바로 바로 봐야 한다 그러면 0으로 셋팅해서 바로 write하는 거고..
그건 api를 사용하는 사람의 판단에 맡겨야지.
물론 내가 만들고 내가 쓰긴 하지만. ㅋ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아 0으로 셋팅하면 바로 군요;;ㅣ
음

김락현([락현]) 님의 말 :
그래서 lib제작이 어려운 거임

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그렇군

김락현([락현]) 님의 말 :
개발이 어려운게 아니고..
요구사항이 다르거든.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
고려사항이 많네요

김락현([락현]) 님의 말 :
ㅇㅇ
개발자 중심으로 생각하면 안되...
개발자 중심으로 생각하면 퍼포먼스에 대한 욕심이 생겨서..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
default 사이즈로 설정하는 플래그를
만들어야겠군요
multi threading 플래그만 했었는데 흠

김락현([락현]) 님의 말 :
나라면..
버퍼 사이즈입력받는 변수를 singed로 해서..
-1을 입력하면 default 사이즈를 넣게..
아니다. CPP을 사용하며..
default변수를 지정하게 하는 방법도 좋겠네
두개 다하면 되겠다.
protytype에..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
근데
c++을 ㅏㅅ용하면

김락현([락현]) 님의 말 :
예를 들어.. LogInitialize( 블라블라, long lLogBufferSize = DEFAULT_LOG_SIZE)

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
라이브러로 못쓰지 않ㄴ..

김락현([락현]) 님의 말 :
정도?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아
cpp로 해놓고..
어차피 함수 타입이니..
그냥 되겠구나..
아

김락현([락현]) 님의 말 :
맹글링만 c로 해도되고..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
디폴트 인수를
쓰고 싶을때가 졸라 많은데
c++로 하긴 싫고 해서 ㅋㅋ
안했거든요 항상
아 근데..음

김락현([락현]) 님의 말 :
c로 하고

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
만약
음
그

김락현([락현]) 님의 말 :
그럼 프로토 타입에 설명을 잘 달아 놓음 되지 

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
디폴트 값 있잖아요
그거 header에
선언할 때
써주는거 아닌가요
근데 그럼 c-type 프로그램 만들면서 가져다 쓸땐
빌드 안될꺼 같은데..

김락현([락현]) 님의 말 :
음 그러겠네

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
지금
파라미터 받는게
로그 파일 full path ,
buffer size
multi threading flag?
이렇게 였는데
mt boolean flag로.
세개.

김락현([락현]) 님의 말 :
multithread로 사용할지 안할지를..
lib에서 flag로 인지해야 하는 거야?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
그게
무조건 mt 에 대비하려고 하면요
mutex를 무조건 걸어야되는건데
멀티스레딩 아니고

김락현([락현]) 님의 말 :
퍼포먼스땜에?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그
원래
멀티 스레딩인데
개발자가 디버깅용으로 싱글 스레딩으로 돌리는 경우
도 있잖아요
이럴땐 오히려
방해되지 않나 해서..

김락현([락현]) 님의 말 :
나라면... 

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그런 경우도 있지만 디버깅때 퍼포먼스 신경은 좀 오버고
싱글 스레드 어플리케이션인데 굳이 뮤텍스 걸 필요 있나 라는 생각도..

김락현([락현]) 님의 말 :
multithread용 api를 별도로 만듬.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
.......
와

김락현([락현]) 님의 말 :
스탈이니깐 정답이라는 소리는 아니고..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아 그러고보니

김락현([락현]) 님의 말 :
LoggingApi만들고.
mLoggingApI를 별도로 제작.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
MT용 은 따로 있는 거도 많이..
봤네
왜 그생각을 못했지

김락현([락현]) 님의 말 :
거기서는 LoggingApI를 만들고 뮤텍스만 걸어줌.
만들고->호출하고

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
네네

김락현([락현]) 님의 말 :
ㅇㅇ.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아
음
컨텍스트도
MT 용 따로 해야겠네 흠
아니 컨텍스트가 아니고
컨텍스트 생성하는 함수를..

김락현([락현]) 님의 말 :
ㅇㅇ.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
거기선
create mutex 만
하면
되겠지
음

김락현([락현]) 님의 말 :
고렇쥐.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
fs 블록 사이즈 물어보려다 
엄한거 ㅁ좋은거 많이 듣네욬
ㅋㅋㅋㅋㅋㅋ
memsize 는 default memory 로 넣어서 하면 128k로 하도록 하고..

김락현([락현]) 님의 말 :
ㅋㅋㅋ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
로그가
12만 글자면
적은편인가요
많은 편인가요?

김락현([락현]) 님의 말 :
그런건 신경 쓰지 마

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
...
ㅋㅋㅋㅋ
64k 로 할까
싶어서 ㅋㅋ
64k 해야지

김락현([락현]) 님의 말 :
굳이 하고 싶다면... 니가 지금 만드는 프로그램에 꼽을 생각하고..
거기에서 얼마나 쓰는지를 기준으로 만들어.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
흠
전 로그는 안남기는ㄷ.........
......
ㅋㅋ

김락현([락현]) 님의 말 :
그러냐 ㅋㅋㅋ
이게 좀 기능이 확장이 되면..
디버그 포트를 통해서 출력하거나..
네트워크 전송등도 하면 잼날거 같은데..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
디버그 포트 ?
가 뭔가요?

김락현([락현]) 님의 말 :
그쯤되면 이미 개 빡세지므로...

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아 시리얼 포트 같은 다른 i/o 인가
음

김락현([락현]) 님의 말 :
비졀 스튜디오로 코딩할때....

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아

김락현([락현]) 님의 말 :
밑에 출력창에 나오는거 있자나

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
debug window?
인가

김락현([락현]) 님의 말 :
ㅇㅇ
뭐 그런거.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
오
그거
해보고 싶
었으나
....
ㅋㅋ

김락현([락현]) 님의 말 :
개발자 입장에서는 편하겠지? ㅋㅋ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그렇죠 ㅋㅋ

김락현([락현]) 님의 말 :
암튼..
그런건 난중에..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
네네 감사합니다 ㅋ

김락현([락현]) 님의 말 :
심심하면 내가 만들께

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
....
제가 형이 만드시기 편하도록
설계를 잘 해야 하지만
제가 설계 능력까진 안되서
ㅋㅋㅋㅋ

김락현([락현]) 님의 말 :
뭐 대충 짜면 되지 멀
일하는거 아니니깐 즐겁게

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
ㅋㅋ
즐거운 고민
ㅋㅋ

김락현([락현]) 님의 말 :
음.. 참고로....
핸들 관리를 할때.. 사용자가 handle값을 관리하게 하기보다는...
걍 int형 변수로 구분할게 할수 있으면..
사용성이 향상되지..
무슨 말이냐면...
만약 handle *pHandle;이고 
Logging( pHandle, 블라블라... )형식이라 가정하면 api사용자가 pHandle값을 계속 관리를 해줘야 하자나

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
넹

김락현([락현]) 님의 말 :
Logging( int Logid, 블라블라 ... )형태로 해 놓으면..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
구조체로 context 만들어서
갖고 있게 했는데..

김락현([락현]) 님의 말 :
디파인 값으로 처리해 노고 import, export를 매우 쉽게 할수 있지
구조체로 context를 가지고 있게 하고..
그건 내부에서 관리하고..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
어 음

김락현([락현]) 님의 말 :
context <-> logid를 맵핑할수 있는 로직이 있어야 겠지..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
엥
음

김락현([락현]) 님의 말 :
logid가 중복되지 않게 처리하는 약간의 관리로직도 필요하고...

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그
import export 가 쉽다는건
어떤건가요??

김락현([락현]) 님의 말 :
lib사용자가 개발하는 하는데.. 소스파일이 10개가 있다면...
전역변수로 처리하던지 인자로 받던지 핸들값을 받아야 하자나

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
네

김락현([락현]) 님의 말 :
그걸 정수형으로 한다면 좀더 편하게 할수 있다는 말.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
그게 정수로 하는거랑
어드레스로 하는거랑
구현의 용이성 측면에서
차이가 있나요??

김락현([락현]) 님의 말 :
사용자 입장에서?

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
네 라이브러리 사용자 입장에서
라이브러리를 이용하는 개발자 입장이죠

김락현([락현]) 님의 말 :
ㅇㅇ 

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
네
지금
잠깐 구조를
말씀드리면..

김락현([락현]) 님의 말 :
직관성면에서 큰 차이가 남.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
일단 간단하게 말씀드려볼게요
context = create_context (...);

...

/* 로그 쓰기 */
log_write (context, 메시지.....);

log_flush (context);

/* 로그 이제 안쓸꺼면 */
log_destory_context (context);
이런식이거든요

김락현([락현]) 님의 말 :
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
직관성 면에서 차이가 난다고 하신게..
int local_logid = param_logid; 
이거랑
context local_ctx = param_ctx;
이정도 차이일거 같은데 
음

김락현([락현]) 님의 말 :
개발을 하다보면....
예상치 못했던 곳에 로그를 찍어 보고 싶은 상황이 생기 않을까?
나라면.....
#define LOGID_MAIN 1, #define LOGID_DEBUG 2
라고 해 놓고.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
....

김락현([락현]) 님의 말 :
WRITELOG( LOGID_DEBUG, 블라븝라.. )
라고 편하게 찍어 보고 싶을 것 같아.
뭐 로그ID를 글로별 변수로 처리해 놓고 하면 큰 차이는 없겠구나.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음

김락현([락현]) 님의 말 :
잠깐 생각해보면..

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
저렇게 하면요
로 그아이디도 제가 지정해 줄 수 있어야 하는거네요 그럼

김락현([락현]) 님의 말 :
LOGINIT( 변수, "셋팅할 로그아이디");
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그래야 저 상수 값이 유효할텐데

김락현([락현]) 님의 말 :
맞어
CLOSELOG( "셋팅한 로그아이디" );
CLOSELOGALL();
정도?
그리고 LIB 사용자는 래퍼 함수를 만들어서...

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음
형이라면 그럼
상수 값을

김락현([락현]) 님의 말 :
WRITELOG ( LOGID1 | LOGID2, "블라블라.. )

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
어떻게 관리하시겟어요??

김락현([락현]) 님의 말 :
도 좋겠군.
나라면 당연히 상수값으로 처리하지.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
그니까 음
저 상수로
아까
그
id 값과
로그 파일 같은 그런 정보들과의 매핑
을
어떤 방식으로 처리하실거 같냐는...
저거 리스트 형식으로 만들면 매번 loop 돌아야되서 안될거고

김락현([락현]) 님의 말 :
쬐그마한 맵을 만들어.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
로그 아이디 만들 때 
동적할당으로 아이디 값 만큼 만들어서
배열 처리하면
속도는 잘 나올거 같은데..

김락현([락현]) 님의 말 :
ㅇㅇ

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
아이디라....
음

김락현([락현]) 님의 말 :
어차피 4바이트 변수로 하면 되니깐..
100개 정도 디파인해 놓고 걍 쓰면 되지
100개 이상 만들면 에러 처리

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
4바이트 변수로 아이디값 지정하게 하려면 OR 연산으로 지정하는건 골아플거 같고

김락현([락현]) 님의 말 :
그건 lib 사용자가 하라고 하고

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
하아
음

김락현([락현]) 님의 말 :
lib입장에서는 그런것까지 신경쓸 필요는 업음.

장재훈({재훈, 뮤스군} Alicization) 님의 말 :
음

김락현([락현]) 님의 말 :
멀티 로깅은 logid를 배타적으로 만들어야 한다는 전제가 있어야 쉽게 구현가능하기 땜시
Last modified 12 years ago Last modified on 02/01/13 23:12:53
Note: See TracWiki for help on using the wiki.