温斯顿没有在打字稿中登录到控制台
Posted
技术标签:
【中文标题】温斯顿没有在打字稿中登录到控制台【英文标题】:Winston not Logging to console in typescript 【发布时间】:2017-06-11 01:57:57 【问题描述】:我被温斯顿弄糊涂了。我正在使用以下打字稿代码登录到我的 *.ts 文件中的控制台:
import Logger, LoggerInstance from "winston";
const logger:LoggerInstance = new Logger();
logger.info('Now my debug messages are written to the console!');
控制台仍然是空的。没有编译错误或其他问题。
同时以下工作正常:
const wnstn = require("winston");
wnstn.info('Finally my messages are written to the console!');
有人知道为什么会这样吗?我必须以不同的方式配置记录器吗?我将如何使用从第二个示例中获得的默认值?
【问题讨论】:
【参考方案1】:这是导入 Winston 的 Typescript 方式。
首先,确保您已经安装了打字机:npm i -D @types/winston
然后,在你的 script.ts
import Logger, transports from 'winston';
var logger = new Logger(
transports: [
new transports.Console(),
new transports.File ( filename: 'somefile.log' )
]
);
在一般情况下,您可以在不使用winston.<...>
之前导入所有常量和类型。
【讨论】:
【参考方案2】:当您实例化一个新的 Logger 实例时,您需要为其提供传输列表,以便它知道将日志发送到哪里:
var logger = new (winston.Logger)(
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)( filename: 'somefile.log' )
]
);
【讨论】:
【参考方案3】:嗯,
感谢@idbehold 的提示,我发现这很简单:
import * as winston from "winston";
winston.info('Now my debug messages are written to the console!');
适用于默认记录器..
【讨论】:
我无法写入文件 因为默认是控制台输出,我觉得【参考方案4】:好吧,我将以下文件作为 winston.ts 关注
import * as appRoot from 'app-root-path';
import * as winston from 'winston';
// define the custom settings for each transport (file, console)
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,
,
;
// instantiate a new Winston Logger with the settings defined above
const logger: winston.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`
const myStream =
write: (message: string) =>
// use the 'info' log level so the output will be picked up by both transports (file and console)
logger.info(message);
;
export default logger;
在 app.ts 中使用 this.app.use(morgan('combined', stream: winston.stream ));
【讨论】:
以上是关于温斯顿没有在打字稿中登录到控制台的主要内容,如果未能解决你的问题,请参考以下文章