성능이 중요한 다중 스레드 응용 프로그램을 작업 중입니다. rlog, Ace 및 Boost 로깅을 살펴 보았습니다. rlog가 가장 빠르기 때문에 선택했습니다 (로깅이 비활성화되면 오버 헤드가 가장 적음).
내가 가진 문제는 릴리스 모드에서도 파일 이름, 줄 번호 등을 표시한다는 것입니다. 해당 정보를 차단하는 방법을 알려 주시면 문제가 해결 될 수 있습니다. 어쨌든 내 상황에서 C ++에서 가장 효율적인 로거는 무엇입니까?
성능이 중요한 다중 스레드 응용 프로그램을 작업 중입니다. rlog, Ace 및 Boost 로깅을 살펴 보았습니다. rlog가 가장 빠르기 때문에 선택했습니다 (로깅이 비활성화되면 오버 헤드가 가장 적음).
내가 가진 문제는 릴리스 모드에서도 파일 이름, 줄 번호 등을 표시한다는 것입니다. 해당 정보를 차단하는 방법을 알려 주시면 문제가 해결 될 수 있습니다. 어쨌든 내 상황에서 C ++에서 가장 효율적인 로거는 무엇입니까?
답변:
안타깝게도 지금은 반대 투표를 할 수 없습니다. 내가 말할 수있는 한 Apache log4cxx와 같은 쓰레기를 절대 사용하지 마십시오. 심각한 버그가 포함되어 있습니다.
제 생각에는 부스트를해야합니다.
Pantheios는 최고의있을 것으로 생각된다 라이브러리를 기록 ++ C를 수행 뿐만 아니라, 100 %의 형태 보증 된 유일한 일이라고 주장합니다 ( 이 기사를 왜의 printf () / iostream 기반 라이브러리가없는 타입 - 설명하는 관련 라이브러리에 대해 안전한)
http://logging.apache.org/log4cxx/index.html 에서 log4cxx로 성공했습니다 . 인기있는 Log4j 로거의 C ++ 버전으로 conf 파일이나 코드를 통해 쉽게 구성 할 수 있습니다. 비활성화 된 경우 오버 헤드는 최소화됩니다 (메서드 호출 및 정수 비교).
로그에 대한 출력 패턴은 날짜 / 시간 및 메시지처럼 간단 할 수있는 변환 패턴으로 정의됩니다. 또한 파일 크기 제한, 롤오버 등을 처리합니다. 다양한 오류 및 소스에 대해 다른 패턴을 구성 할 수도 있습니다.
rlog가 제공하는 추가 정보 (예 : 파일 이름, 줄 번호 등)를 차단하는 방법은 다음과 같습니다. main()
함수 (또는 모든 위치) 에서 rlog를 초기화 할 때 다음을 수행 할 수 있습니다.
rlog::RLogInit(argc, argv);
rlog::StdioNode slog (2, rlog::StdioNode::OutputColor);
slog.subscribeTo( RLOG_CHANNEL("error") );
의 두 번째 인수 StdioNode
는 플래그가 출력을 제어하는 것입니다. 가능한 플래그의 전체 목록은 rlog 문서 (Doxygen으로 생성 가능)를 확인하십시오. 여기 예제의 하나는 rlog가 다른 정보를 추가하지 않고 심각도에 따라 출력에만 색상을 지정하도록합니다.
로고 시스템을 고려할 수 있습니다. logog는 정확히 이런 종류의 기능을 제공하지만 Pantheios가 가지고있는 암시 적 코드 종속성이 없습니다. logog는 스레드로부터 안전하며 언제든지 기록되는 메시지 유형에 대한 높은 수준의 제어가 가능합니다.
저는 logog의 저자이자 관리자이기 때문에 제 의견은 약간 편견이 있습니다. 그러나 이것을 구현하기 전에 rlog, Pantheios 및 기타 로깅 시스템을 검토했습니다.
일부 오버 헤드는 매크로 / 스트림에서 발생할 수 있습니다. 로깅이 비활성화 된 경우 로깅되는 문자열을 구성하지 않도록 매우주의해야합니다.
스트림과? : 연산자를 잘 사용하면 매크로처럼 그렇게 할 수 있습니다.
빠르고 안정적이며 스레드로부터 안전한 C / C ++ 언어 용 로그 라이브러리 인 c-log lib, https://github.com/0xmalloc/c-log를 사용해보십시오 .
#include <pthread.h>
...)