fmt 라이브러리로 C++ 콘솔 로거 작성하기
프로그램의 로그를 쓰기 위해 보통 Log4j, spdlog… 등 로거 프레임워크를 사용합니다. 사용하기 간편하며 강력한 기능을 제공합니다.
하지만 저는 fmt를 이용하여 간단히 사용할 수 있는 콘솔 로거를 작성해보려고 합니다. 😎
쉽고 간단한 길 놔두고 이상한 길 가기
⚠️ Warning
상용 프로그램에서 아래와 같이 로그를 사용한다면 스레드로 인한 작동 오류가 있을 수 있습니다.
fmt를 사용해보기 위해 간단히 작성된 것이므로 로거 프레임워크를 사용하기를 권장합니다.
fmt
💡 {fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams.
fmt는 C 언어의 printf()
함수의 %d
와 같이 문자열에 특정 포맷을 잡는 라이브러리입니다. 하지만 기존의 포맷과 다르게 사용이 쉽고 차원이 다른 기능을 제공하며 C++20에서 표준으로 채택되었다는 점이 큰 장점입니다!
더 자세한 내용을 보고 싶으시면 이 곳을 방문하여 확인해보세요.
Dependencies
fmt는 Github에서 소스를 받아 직접 빌드(cmake)하거나 리눅스를 사용한다면 패키지 관리 프로그램(apt, yum, …)으로 쉽게 설치할 수 있습니다.
저는 리눅스를 사용하고 패키지 관리 프로그램을 통해 설치했습니다.
|
|
Implement 🏗️
💡 Tips
git clone https://github.com/JongBin-Park/simple-logger-cpp.git
make
를 이용하여 빠르게 결과물을 볼 수 있습니다.
logger.h
|
|
- 5-6: fmt 라이브러리를 사용하기 위해 헤더 파일을 포함합니다.
fmt/color.h
헤더를 이용하여 로그 레벨을 색깔별로 설정할 수 있습니다. - 8: 상황에 따라 달리 사용할 수 있게 로그 레벨을 정의합니다.
- 28: 로그 정보를 제한할 때 사용됩니다.
- 30: 실질적으로 로그를 콘솔에 출력합니다. 또한 다수의 여러 자료형을 출력하기 위해 템플릿 가변 인자를 사용합니다.
- 60-79: 레벨별 로그 출력 함수입니다.
|
|
- 7: 로그 레벨의 default값이
LOG_LEVEL_INFO
이기 때문에 해당 라인의debug()
함수는 실행이 되지 않습니다. - 8: fmt 포맷팅으로
12.345
라는 값을 문자열로 출력합니다.