winston
versi? _winston@2
winston@3
node -v
keluaran: _ v9.8.0Saya mengalami kesalahan ketikan saat mencoba membuat fungsi tulis di objek logger.stream.
error TS2322: Type '{ write(message: any, encoding: any): void; }' is not assignable to type '(options?: any) => ReadableStream'.
Object literal may only specify known properties, and 'write' does not exist in type '(options?: any) => ReadableStream'.
39 write(message: any, encoding: any) {
~~~~~
Tidak ada kesalahan
const options = {
file: {
level: "info",
filename: `${appRoot}/logs/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: "debug",
handleExceptions: true,
json: false,
colorize: true,
},
};
this.logger = winston.createLogger({
transports: [
new winston.transports.File(options.file),
new winston.transports.Console(options.console),
],
exitOnError: false, // do not exit on handled exceptions
});
// create a stream object with a 'write' function that will be used by `morgan`
this.logger.stream = {
write(message: any, encoding: any) {
// use the 'info' log level so the output will be picked up by both transports (file and console)
this.logger.info(message);
},
};
Saya mengikuti tutorial ini:
https://www.digitalocean.com/community/tutorials/how-to-use-winston-to-log-node-js-applications
memiliki kesalahan yang sama
Pada pandangan pertama sepertinya masalahnya ada pada definisi tipe: stream(options?: any): NodeJS.ReadableStream;
Saya curiga harus dupleks.
Sunting: Sebenarnya yang dapat ditulisi juga dapat melakukannya. Saya akan melihat apakah saya bisa membuatnya bekerja.
@DABH bisakah Anda melihat ini?
Ini menjadi masalah karena Anda menambahkan stream
langsung ke logger Anda, coba ini sebagai gantinya:
// At the bottom of your winston config add
export const stream = {
write: (message) => {
logger.info(message);
},
};
Kemudian ubah login Anda dengan cepat seperti ini:
import { stream } from 'config/winston.ts';
import * as morgan from 'morgan';
app.use(morgan('combined', { stream }));
Karena kesalahan yang Anda posting, saya berasumsi bahwa Anda menggunakan skrip ketikan, maka contoh saya ditulis dalam skrip ketikan. Satu gotcha kecil, Anda mungkin tergoda untuk menulis aliran Anda seperti ini:
export const stream = {
write: logger.info,
};
Namun ini akan memunculkan pengecualian karena argumen kedua dari fungsi stream bukanlah yang diharapkan oleh fungsi logger info
. Beri tahu saya jika ini membantu.
Komentar yang paling membantu
Ini menjadi masalah karena Anda menambahkan
stream
langsung ke logger Anda, coba ini sebagai gantinya:Kemudian ubah login Anda dengan cepat seperti ini:
Karena kesalahan yang Anda posting, saya berasumsi bahwa Anda menggunakan skrip ketikan, maka contoh saya ditulis dalam skrip ketikan. Satu gotcha kecil, Anda mungkin tergoda untuk menulis aliran Anda seperti ini:
Namun ini akan memunculkan pengecualian karena argumen kedua dari fungsi stream bukanlah yang diharapkan oleh fungsi logger
info
. Beri tahu saya jika ini membantu.