반응형
  • 티스토리 홈
  • 프로필사진
    묭묭.cpp
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
묭묭.cpp
  • 프로필사진
    묭묭.cpp
    • 분류 전체보기 (103)
      • 데이터베이스 (2)
      • 포트폴리오 (25)
      • 윈도우 인터널즈 (20)
      • 네트워크 (4)
      • IOCP 게임서버 (11)
      • C (2)
      • 디스어셈블리 디버깅 (1)
      • WindowsAPI (11)
      • 학원 강의 정리 모음 (20)
      • 운영체제 (5)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • LogClass 소개
        2024년 11월 27일
        • 묭묭.cpp
        • 작성자
        • 2024.11.27.:48

        LogClass 소개

        로그 레벨

        세 단계로 구분됨

        • DEBUG(0)
        • SYSTEM(1)
        • ERR(2)

        목적

        • 로그 레벨을 통해서 런타임 중 남길 로그를 구분
          • 너무 많은 로그는 부담임
        • 런타임 중 로그 레벨을 변경할 수 있음
          • SYSTEM 레벨로 수행 중 갑자기 DEBUG 레벨의 로그를 보고 싶을 때 유용!!

        로그 클래스 사용법

        싱글톤 클래스로 구현됨

        • 전역 객체로 Main 함수 시작 시 초기화해 주어야 함
        • 다른 스레드가 수행되기 전에 무조건 초기화 되어야 함
          • 초기화 과정에서의 동기화 처리는 딱히 구현하지 않음

        전역 포인터 변수가 CLogger.h에 선언되어 있음

        • Main 시작 부분에서 g_Logger = CLogger::GetInstance() 호출이 필요

        이후 해줘야 할 것

        • SetMainDirectory(const WCHAR *);
          • 로그 파일의 가장 상위 디렉터리 설정
          • 로그 레벨 설정(선택)
            • 설정하지 않으면 LOG_LEVEL::DEBUG로 설정됨

        제공되는 인터페이스

        WriteLog

        void WriteLog(const WCHAR *directory, const WCHAR *type, LOG_LEVEL logLevel, const WCHAR *fmt, ...);
        • directory : mainLog 디렉터리에서 하위 디렉터리 지정
          • 만약 nullptr을 전달하는 경우 mainLog 디렉터리에 로그 파일 생성
        • type : 파일 이름 지정
        • logLevel : 로그 레벨 설정
        • fmt ... : printf 와 같은 방법으로 사용 가능

        설정한 파일에 로그를 남김

        WriteLogHex

        void WriteLogHex(const WCHAR *directory, const WCHAR *type, LOG_LEVEL logLevel, const WCHAR *logName, BYTE *pBytes, int byteLen);
        • logName : 로그의 첫번째 줄에 남을 메시지
        • pBytes : 바이트 배열
        • byteLen : 바이트 배열 길이

        설정한 파일에 바이너리 로그를 남김

        WriteLogConsole

        void WriteLogConsole(LOG_LEVEL logLevel, const WCHAR *fmt, ...);

        콘솔에 로그를 남김

        핵심 구현 내용

        strsafe.h의 안전 문자열 함수를 사용

        C 런타임 라이브러리의 _s 함수와의 차이점

        • _s 함수는 버퍼 오버런 시 그냥 짤라서 안전한 부분까지 써버리고 성공 처리
        • strsafe.h의 StringCch_ 계열의 함수는 안전한 부분까지 쓰고 실패 처리함
          • 에러 코드로 확인 가능함

        반환값이 S_OK가 아닐 시

        • STRSAFE_E_INSUFFICIENT_BUFFER가 반환되면 문자열을 모두 쓰지 못했음을 의미
        • 이때 나의 LogClass는 로그 버퍼 크기가 부족했다는 로그를 남김

        파일 쓰기 동기화 처리

        파일 별 SRWLock을 통해 동기화를 처리함

        • unordered_map을 사용
          • FileName을 Key로 SRWLOCK을 Value로
          • WCHAR *인 fileName을 std::wstring으로 변환하여 key로 사용됨

        처음 FileName을 만드는 작업을 할 때 디렉토리의 생성은

        • 위 unordered_map을 조회하여 최초 1번만 수행됨
        반응형

        '포트폴리오' 카테고리의 다른 글

        IOCP Echo Server 14 - SmartPointer 구현  (0) 2024.11.26
        IOCP Echo Server 13 - Recv 복사 비용 줄여보기  (0) 2024.11.25
        IOCP Echo Server 12 - 락 프리 큐 적용  (0) 2024.11.24
        IOCP Echo Server 11 - 락 프리 스택 적용  (0) 2024.11.19
        IOCP Echo Server 10 - ConfigFile Parser  (0) 2024.11.15
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바