2013-12-12 3 views
5

내 app 디렉토리에서 'test.log'파일을 찾을 수 없습니까? 코드 아래winston이있는 nodejs 응용 프로그램의 로그 파일은 어디에 있습니까

는 server.js에

var winston = require('winston'), mylogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)(), 
    new (winston.transports.File) ({filename: 'test.log'}) 
    ] 
}); 

mylogger.log('Hello world'); 

내 응용 프로그램 디렉토리 :

/ 
    app/ 
    config/ 
    public/ 
    server.js 
+2

... – Brad

답변

0

흥미로운 질문입니다. 파일 전송의 소스 코드를 보면 디렉토리가 지정되지 않은 경우 파일 이름 매개 변수 자체에서 파생 된 것처럼 보입니다. 명시 적으로 지정된 디렉토리로 절대 경로 또는 상대 경로를 사용하는 것이 좋습니다.

이 줄은 절대 경로를 나타내는 곳입니다. options.filename 디렉토리를 포함하지 않는 경우

this.dirname = options.dirname || path.dirname(options.filename); 

그래서 질문은, 무엇을 반환 path.dirname 않는 것을 :

var fullname = path.join(self.dirname, target); 

self.dirname 여기에 설치입니까?

나는 의심 할 사실은 잘 모르겠지만, 두 가지 가능성이 있습니다

  • 과정
  • 파일 시스템 루트의 현재 작업 디렉토리, path.dirname이의 왼쪽입니다 걸리는 경우 때문에/마지막으로, 그것은 undefined하고 undefined는 + '/test.log은'/test.log '

이 두 단계가 있습니다 취할 수 있습니다 :

  • 현재 디렉토리 및 파일 시스템 루트를 확인하여 현재 디렉토리를 확인하십시오. 나는이 같은 테스트 파일 작성

https://github.com/flatiron/winston/blob/master/lib/winston/transports/file.js

+0

내가 창에 검색 명령을 사용하여, 아무 결과가 없습니다. {filename : '/ test.log'}를 사용하도록 변경했지만 server.js 파일의 디렉토리에 여전히 나타나지 않습니다. – user3044147

+0

파일 이름 : __dirname + '/debug.log'}이 방법은 여전히 ​​작동하지 않습니다. – user3044147

+0

확인하셨습니까? 사용 권한 문제가 있습니까? – Brandon

0

  • 명시 적으로 (어쨌든 아마 좋은 생각) 디렉토리를 지정합니다 (즉, 이론을 테스트) :

    var winston = require('winston'); 
    var logger = new (winston.Logger)({ 
        transports: [ 
        new (winston.transports.Console)(), 
        new (winston.transports.File)({ filename: 'somefile.log' }) 
        ] 
    }); 
    
    logger.log('info', 'Hello distributed log files!'); 
    logger.info('Hello again distributed logs'); 
    
    process.exit(); 
    

    및 마지막 줄을 지우면 로그 파일이 만들어지고 올바르게 로깅됩니다.

    로거를 테스트하고 싶었 기 때문에 process.exit()을 사용하여 프로그램을 중단 시켰습니다. 로그 파일의 프로세스가 손상된 것 같습니다.

    확인이 문제 : 아마 현재 작업 디렉토리 https://github.com/winstonjs/winston/issues/228

  • 관련 문제