나는 심각도 채널 로거를 사용하려고하지만 BOOST_LOG_SEV
가 CONST 방법은 없다는 함께 문제를 히트 - 나는 때문에 모두 open_record()와 push_record()부스트 로그 로거 작업이 왜 const가 아닌지?
이 기본적으로 만들기 위해 저를 강제로 생각하고 내 클래스의 모든 메서드는 로거에 쓰고 싶기 때문에 const가 아닙니다. 나는 그렇게 할 여유가 없다. 그래서 나는 현재 글로벌 로거에만 국한되어있다.
내 현재 구현에서, 각 클래스는 (자신의 생성자에서 초기화) 채널과 클래스 이름의 로거를 가지고, 그리고 내가 이유를 듣고 싶네요 BOOST_LOG_SEV(this->logger, level)
어떤 점에서 로그 메시지를 발행 non-constness 뒤에 그리고 만약 나의 디자인이 Boost :: Log를위한 것이 아니면.
부스트는 오픈 소스 애프터 콜이므로 소스 코드를 참조하기 만하면됩니다. 나는 그것이 질문을하고 대답을 기다리는 것보다 빠를 것이라고 생각합니다. –
상태를 변경하기 때문에 비 const가 될 수 없습니다. 로거가 스레드로부터 안전하다하더라도 mutable 키워드를 사용해야하는 곳의 완벽한 예입니다. 로거는 객체의 상태에 영향을주지 않는 비 const 스레드 안전 멤버입니다. – John5342
그러면 더 좋은 디자인이 될 것입니까? 모든 메소드를 non-const로 만들어야하기 때문에 로거 클래스 멤버를 만드는 것은 문제가되지 않습니다. – Carneiro