2013-03-14 4 views
0

Winston으로 Nodejs의 콘솔을 무시하려고합니다.Nodejs 콘솔 과부하 범위 문제

for (var z in loggerSettings) { 
    console[z] = (function() { 
     var i = z + '' 
      , _backup = console[z]; 
     return function() { 
      var utfs = arguments.length >= 2 ? util.format.apply(util, arguments) : arguments[0] 
       , coldex = 0; 
      if (true) logger[i == 'log' ? 'info' : i](utfs); 
      if (loggerSettings[i].console){ 
       if ((coldex = utfs.indexOf(']') + 1) <= MAX_TAG_LENGTH) 
        _backup(utfs.substring(0, coldex)[i]['inverse'] + utfs.substring(coldex)); 
       else _backup(utfs); 
      } 
     } 
    })(); 
} 

여기 var z 단지 기본적인 CONSOLE.LOG, console.info, console.warn 방법이다. 문제는 각각의 익명 함수에 대해 z가 변경된다는 것입니다. 문제를 해결하기는 다소 어려운 일이지만 z의 범위가 변경되는 것 같고 변수 z는 루프의 반복마다 일정한 값을 정확히 지키지 않습니다. Z는 범위에 충실하기를 원하지 않습니다.

답변

1

자바 스크립트에는 기능 범위가 있지만 블록 범위가 없습니다. 즉, 콘솔 기능의 z에 대한 모든 참조는 마지막 값 z을 사용합니다.

당신이 'z는'스틱 익명 함수에 인수로 전달하려면 : 그 개념에 혼란을 조금

for (var z in loggerSettings) { 
    (function(z) { 
    console[z] = (function() {...}); 
)(z); 
}; 
+0

임. 좀 더 넓혀 주시겠습니까? – bluejamesbond

+0

노드와 함께이 요령을 실행 해보십시오. https://gist.github.com/robertklep/5162186 – robertklep