== 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를 배타적으로 만들어야 한다는 전제가 있어야 쉽게 구현가능하기 땜시 }}}