C++:
로깅

방법:

리눅스 박스에서 작업 중이고 좋은 옛날 C++로 로그를 파일에 넣고 싶다고 가정해 보겠습니다. 파일 작업을 하기 위해 <iostream><fstream> 라이브러리를 포함해야 합니다. 여기 간단한 예제가 있습니다:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream logFile("appLog.txt", std::ios::app);  // 추가 모드로 열기

    if (!logFile.is_open()) {
        std::cerr << "로그 파일을 여는 데 문제가 있습니다!" << std::endl;
        return 1;
    }

    logFile << "애플리케이션 시작" << std::endl;
  
    // ... 앱 로직 중 어딘가에서
    logFile << "중요한 이벤트가 발생했습니다" << std::endl;

    // 파일 스트림을 닫는 것을 잊지 마세요
    logFile.close();

    return 0;
}

tail -f appLog.txt로 로그 파일을 테일링하면 다음과 같이 표시됩니다:

애플리케이션 시작
중요한 이벤트가 발생했습니다

정리되었습니다, 이벤트의 타임스탬프 기록을 가지게 되었군요!

심층 분석

로그는 컴퓨팅 자체만큼 오래되었고, 고대 컴퓨터가 무엇을 하고 있는지 추적하기 위한 종이 위의 실제 표시에서 그 뿌리를 찾을 수 있습니다. 현대에는 모두 정교한 소프트웨어 솔루션에 관한 것입니다. 위의 간단하고 더러운 예제처럼 바로 파일로 로깅할 수도 있고, C++ 영역에서 Log4cpp나 Boost.Log 같은 멋지고 정교한 로깅 프레임워크를 사용할 수도 있습니다; 이런 벤처들은 로깅 레벨, 포맷 제어 등을 제공합니다.

레벨에 대해 말하자면, 로깅 모범 사례는 서로 다른 심각도 수준의 로깅을 사용하는 것을 포함합니다—정보, 디버그, 경고, 오류, 치명적—버그를 제거하거나 앱이 왜 심술궂은 청소년처럼 행동하는지 파악할 때 소음을 필터링할 수 있습니다.

성능 측면에서, 로그에 대해 게을러지지 마세요. 과도한 로깅은 번개처럼 빠른 앱을 느릿느릿한 달팽이 경주로 바꿀 수 있고, 파일 시스템을 느려지게 하거나, 클라우드 기반이라면 저장 공간 요금으로 비용을 들게 할 수도 있습니다. 적절한 균형을 찾는 것이 중요합니다: 필요한 것만 기록하고, 그 이상은 하지 마세요.

또한 보기

로깅 습관을 더욱 발전시키고 싶은 분들을 위한 몇가지 자료입니다:

그리고 로깅의 배경과 방법에 대해 좀 더 이해하고 싶다면, 다음을 읽어보세요:

  • 스택 오버플로우 스레드에서 로깅 모범 사례는 이 주제에 대한 동료 심사를 통한 심층 분석을 제공합니다.