C++의 약간의 앱으로 살짝 사용하기 쉬운 간이 로거의 구현 예

개요



"있는 것"이라고 말한 토알있는 몇 가지 이야기 :
小さなサンプルアプリ作る
↓
でもまあロガーくらい入れて作りたい
↓
boost::log入れるのめんどくさいしちょっとしたやつ
↓
気づけばいつものロガーコードを書いている

이런 때에 쓰고 있는 간이 로거의 실장 예를 소개하고 싶다.

구현 예



조금 실용상기용으로 하기 위한 주문도 넣어도 150 가량 정도의 것. 본질적으로는 100 가량 정도.
  • htps : // 기주 b. 코 m/토끼/토끼/bぉb/마s테 r/인cぅ로/토끼/ぉg/에아 sy_ぉげ r. h x

  • 요점은 후술로서, 우선 사용법↓.

    사용법


    //↓これを定義すると easy_logger は LOGI などで何も出力しなくなります。
    //#define DISABLE_USAGI_LOG_EASY_LOGGER
    #include <usagi/log/easy_logger.hxx>
    
    #include <thread>
    #include <random>
    
    auto main() -> int
    {
      // 単純な使い方
      LOGI << "test1";
    
      // 複数の operator<< で繋いでも綺麗に出力されます。
      LOGD << "test2 multiple output operators in the one line " << 12345 << ' ' << 1.2345f;
    
      // マルチスレッドで競争的にログ出力しても分断されずに綺麗に出力されます。
      std::random_device r;
      auto a = std::thread( [&]{ for ( auto n = 0; n < 16; ++n ) LOGW << "/(^o^)\ " << r() << ' ' << r()<< ' ' << r() << ' ' << ' ' << r(); } );
      std::thread( [&]{ for ( auto n = 0; n < 16; ++n ) LOGE << "\(^o^)/ " << r() << ' ' << r()<< ' ' << r() << ' ' << ' ' << r(); } ).join();
      a.join();
    }
    

    실행 결과



    ANSI escape code 에 대응한 현대적인 단말이라고 다채롭게 표시됩니다.



    미대응 단말이라면 불필요한 주문이 깜빡 표시될지도 모릅니다만, 실용상은 어떻게 하는 것은 없겠지요(´・ω・`)

    구현의 요점


  • log( "hoge", 123, ... ); 그렇다고 어쩐지 다사 느낀다 ( variadic template 를 사용하면 간단하게 구현할 수 있어 , 안전하고 낭비인 오브젝트도 불필요한 것은 좋지만...)
  • cout 로 출력하도록 operator<< 로 외형 깨끗하게 로그를 출력하고 싶다.
  • operator<< 를 받고 로그를 출력할 수 있는 객체가 필요하다 (≃ operator<<

  • 디버그 등의 도움이 되는 정보를 자동적으로 부가하고 싶다
  • class __FILE__ __LINE__
  • 추가 정보를 로그 앞에 붙이면 방해로 읽기 어렵게된다 → 뒤에 붙인다
  • __PRETTY_FUNCTION__ 의 결합성 → 직접. .

  • 실행 시간도 로그에 출력하고 싶다
  • operator<< 는 처리계에 의해 분해능이 불충분
  • cout 또는.
  • cout or std::chrono::steady_clock ( Windows ) 를 구분하면 실용 상당히 곤란하지 않게 된다 → usagi::chrono::default_clock ( 이런 일도 있을까 ) .


  • info, warn, error, debug 정도는 로그의 종류 나누기를 갖고 싶다.
  • 일단 로그 무효화 수단을 원한다 → 무효화를 매크로 정의되어 있으면 boost::timer::cpu_timer 는 있지만 아무것도 하지 않는 로그 오브젝트에 boost::chrono::steady_clock
  • 「살짝」사용해 「편리하다」로 「외형 멋진」 것이 목적이므로, 기용인 출력 전환이라든지, 실행 속도상의 단점이라든지, 괜찮은 것은 신경쓰지 않는다. 우선 푹 빠져 움직이고 깔끔하게 사용할 수 있으면 OK.

  • 초고 이후에 추가한 변경


  • 멀티스레드로 사용해도 무너지지 않고 깨끗하게 출력된다.
  • 좋은 웹페이지 즐겨찾기