2014-06-23 5 views
2

나는 node.js로 앱을 만들고 표현합니다. 나는 bunyan을 사용하기 시작했으나 로그 요청을 열심히 이해하는 데 어려움을 겪고 있습니다. bunyan와 (과) 요청 보내기

내 라우터 기능과 같이 호출하는 말 : request는 POST 요청에서 발생하고, request.body에서 몇 가지 물건을 가지고 있습니다

function(request, someOtherStuff, done){\\do something} 

.

다음과 같이하고 싶습니다. 기능을 사용하면서 오류가 발생하면 오류 (예 : req.body 포함)를 기록하고 싶습니다. 뭔가 같이 :

if(err) { 
    bunyan.error(err,request); 
    done(err); 
} 

나는 내가 번연 구성 serializers: {req: reqSerializer}를 사용할 수 알지만, 요청이 실제로 로그인 한 예제를 찾을 수 없습니다.

모든 제안은 매우 높이 평가됩니다..

답변

2

serializer가하는 일은 로그 레코드를 쓸 때 "req"라는 필드를 전달하면 형식이 올바르게 지정되었는지 확인하는 것입니다. 당신이 serializer를 일단

그래서, 당신은 단순히 호출하여 요청에 오류를 기록 할 수 있습니다 logger 일부 매개 변수 bunyan.createLogger를 호출 한 결과입니다

logger.error({ req: request, err: err }, "Optionally, some message"); 

합니다.

로깅 요청을 위해 특별히 설계된 morgan이나 더 구조적인 것을 찾고있는 경우 bunyan-request을 살펴볼 수도 있습니다.

(. 당신이 {req: bunyan.stdSerializers.req}을 의미 {req: reqSerializer} 쓴 그리고 그건 그렇고, 당신의 질문에 희망)

2

내가 구현 한 방법은 다음과 같이 app.js에 처리기를 추가하는 것입니다

app.use(function(req, res, next){ 
    log.info(reqSerializer(req)); 
    next(); 
}); 

reqSerializer 함수에는 반환 할 항목이 들어 있습니다. 예 :

또한
function reqSerializer(req) { 
    return { 
     method: req.method, 
     url: req.url, 
     headers: req.headers, 
     somethingCustom: ..., 
    } 
} 

당신이 로거를 초기화 할 때 reqSerializer이 포함되어 있는지 확인은, 예를 들어

var log = bunyan.createLogger({ 
    name: 'myapp', 
    serializers: { 
     req: reqSerializer 
    }, 
} 

그래서 모든 시리얼 라이저, 당신은 여전히 ​​사실에 대한 로거에 전달해야을 REQ 객체를 직렬화입니다 않습니다 그것은 기록되어야합니다.