2017-07-18 12 views
3

ロギングモジュールWinstonをtypescriptで使用する方法を理解できません。私はロガーレベルを設定しようとすると、エラーを持って、そしてもう一つは、私はエラーをログに記録しようとすると:Winstonをtypescriptで使用する

import * as logger from "winston"; 

logger.level = 'debug'; 
// [ts] Cannot assign to 'level' because it is a constant or a read-only property. 

logger.error(new Error('test')); 
// [ts] Argument of type 'Error' is not assignable to parameter of type 'string'. 

が、私は私のプロジェクトにwinston@types/winstonの両方を追加しました。


編集:ジョシュアの答えを完了するために、どこにも...デフォルトウィンストンでにログことを思えません。ここで

import * as logger from "winston"; 

logger.configure({ 
    level: 'debug', 
    transports: [ 
     new logger.transports.Console({ 
      colorize: true 
     }) 
    ] 
}); 

答えて

4

をウィンストンの型定義は、以下のとおりです:あなたはそれを動作させるためにトランスポートを追加する必要が

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/winston/index.d.ts

あなたは、ファイルの一番下を見れば、デフォルトのエクスポートが宣言されていますconstと入力してください。levelプロパティを変更しようとすると、constオブジェクトを変更しようとしているためにエラーが表示されます。ここでは、関連する線です:

declare const winston: winston.Winston; 
export = winston; 

の代わりに、直接そのプロパティを設定しようとしているが、configureメソッドを使用してみてください(あなたのloggerインポートタイプWinstonであることに注意してください:

logger.configure({ 
    level: 'verbose', 
    ... 
}) 

これがない場合あなたが変更することができる新しいLoggerInstanceを作成しようとする可能性があります。

2番目のエラーは、渡しているためですErrorオブジェクトで、stringが期待されます。 Winston.infoの宣言はここにある:

info: LeveledLogMethod; 

そして、ここではLeveledLogMethodインタフェースです:

interface LeveledLogMethod { 
    (msg: string, callback: LogCallback): LoggerInstance; 
    (msg: string, meta: any, callback: LogCallback): LoggerInstance; 
    (msg: string, ...meta: any[]): LoggerInstance; 
} 
+0

ウィンストンとエラーを記録することは不可能であることを意味するのでしょうか?それは私には狂ったように聞こえる。 –

+0

'Error'の' message'プロパティを記録することができます。 –

+0

はい、スタックトレースは失われます –

関連する問題