2014-07-25 2 views
2

응용 프로그램 런타임을 통해 morgan의 로깅 형식을 변경하려고 시도했습니다.Expressjs Morgan이 동적으로 로그 서식을 지정합니다.

값이 데이터베이스의 일부 원격 값에서 보류로 변경되므로 morgan의 결과가 변경되기를 바랍니다. 예. 데이터베이스에 값이 있으면 값이 형식이 '결합'3 인 경우 1 모건의 형식은 'DEV'이다

내가 가지고있는 서식 모건를 설정하기 위해 다음 줄을 사용하고 :

app.use(morgan(get_verbose())) 
    .use .... 

여기서 get_verbose는 형식 옵션과 일치합니다. 그러나 동적 인 결과를 얻지는 못했지만 한 번만 포맷팅을 설정했습니다.

내가 잘못 알고 있거나 실행시 1 형식으로 제한된 morgan입니까?

답변

1

한 가지 방법은 미들웨어 기능을 만들 수있을 것이라고 "랩"모건 미들웨어 :

var morganDev = mordan('dev'); 
var morganCombined = morgan('combined'); 

app.use(function(req, res, next) { 
    var value = /* get value somehow */ 

    if (value === 1) { 
     morganDev(req, res, next); 
    } else if (value === 3) { 
     morganCombined(req, res, next); 
    } 
}); 

앞까지, 당신은 당신이 원하는 각각의 로그 형식에 대해 하나의 로거를 만들 수 있지만 중 하나를 첨부하지 않습니다 애플 리케이션에. 사용자 정의 함수는 값을 읽고이 요청에 대한 처리를 처리 할 로거를 선택합니다.

안전 업데이트 : 그렇지 않으면 요청 처리가 실속과에 대한 응답을 반환하지 않습니다, value은 어느 쪽도 1 또는 3이 블록은 직접 next()를 호출해서는 안되는 경우를 처리 할 수있는 포괄 else 블록이 있어야한다 고객.

관련 문제