2012-12-20 3 views
2

로깅 스트림 서비스를 작성하려면 ofstream 클래스를 확장해야합니다.맞춤형 "ofstream"출력

목표는 각 줄을 가로 채고 각 머리글에 사용자 지정 텍스트 (날짜/시간, 심각도 등)를 추가하는 것입니다.

이제 C++ 전문가가 아니므로이 작업에 대한 많은 설명서를 읽었습니다. http://asmodehn.wordpress.com/2010/06/20/busy-c-coding-and-testing
http://gabisoft.free.fr/articles-en.html

위의 기사

http://www.angelikalanger.com/Articles/Topics.html#CPP

사용자 정의 스트림 버퍼를 작성하는 것이 좋습니다,하지만 파일에이 개념의 포팅하는 동안 나는 많은 어려움을 발생 스트리밍합니다.

이 목표를 달성하는 간단한 방법이 있습니까?

+1

나는 단순히 std :: ofstream을 감싸는 것이 좋습니다. 즉, std :: ofstream 멤버로 클래스를 만들 수 있습니다. – Aleph

+0

이 항목의 이전 읽기에서 나는 지금 제거 된 답을 발견했습니다 : http://stackoverflow.com/questions/4366904/custom-stream-to-method-in-c/4372966#4372966 !!! –

답변

1

사용자 지정 스트림 버퍼를 쓸 필요가 없습니다. 가장 간단하고 직접적인 방법은 제공하여 사용자가 출력을 보낼 수있는 클래스를 만드는 것입니다 그것을 플릿 단일 인수 운영자 < <() :

m_outstream 몇 가지 표준 유형 :: ostream에 (표준이다
template <typename T> 
std::ostream& operator<<(const T& data_) 
{ 
    m_outstream << m_severity << "\t" << getTimeStamp() << "\t" << data_; 

    return m_outstream; 
} 

:: ofstream 등). m_severity 및 getTimeStamp()는 삽입 할 수있는 예제입니다 (심각도 유형을 ostream으로 형식화하고 출력하려면 bog 표준 두 개의 인자 연산자 < <()를 생성 할 수 있습니다).

myLogger << "failingFunction(" << argument << 
      "): Could not do something." << std::endl; 

과 같은 모습 m_outstream에 출력을 얻을 것이다 :

경고 2012-01-03 19시 32분 failingFunction ("인수를

이 다음과 같은 일을 할 수 있습니다 가치 ") : 뭔가를 할 수 없습니다.

이 외에도, 당신은 로거 클래스라는 방법을 사용하는 템플릿 사용 사업자 < <()를 추가로 간단하게 할 수있다 심각도를 설정하는 방법을 원할 것입니다. 정말 멋있어지기를 원한다면 setw()가 std :: ostream에서하는 것처럼 동작하는 자신 만의 조작기를 작성할 수 있습니다. 필기 조작기에 대한 입문서는 http://www.math.hkbu.edu.hk/parallel/pgi/doc/pgC++_lib/stdlibug/man_6665.htm을 참조하십시오.

+0

정말 고마워요! :) –

+0

안녕하세요, 템플릿을 사용하여 myy logger 클래스를 확장하고 있지만 응용 프로그램을 연결할 때 다음과 같은 몇 가지 오류가 발생합니다. ' "오류 LNK2001 : 해결되지 않은 외부 기호"public : class std :: basic_ostream > & __thiscall Logger :: operator <<< char const [35]> (char const (&) [35]) "(?? $? 6 $$ BY0CD @ $$ CBD @ Logger @@ QAEAAV? $ basic_ostream @ DU? $ char_traits @ D @ std @@@ std @@ AAY0CD @ $$ CBD @ Z) \t ... \ DependencyResource.obj "다시 도와 줄 수 있니? 고맙습니다! –