TypeScriptでロギングモジュールWinstonを使用する方法がわかりません。ロガーレベルを設定しようとするとエラーが発生し、エラーを記録しようとすると別のエラーが発生します。
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
の両方をプロジェクトに追加しました。
編集:ジョシュアの回答を完了するには、デフォルトでwinstonが...どこにもログを記録していないようです。動作させるにはトランスポートを追加する必要があります。
import * as logger from "winston";
logger.configure({
level: 'debug',
transports: [
new logger.transports.Console({
colorize: true
})
]
});
Winstonの型定義は次のとおりです。
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',
...
})
これが機能しない場合(configure呼び出しが他に何を期待しているのか正確にはわかりません)、新しい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;
}