温斯顿没有在打字稿中登录到控制台

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 ));

【讨论】:

以上是关于温斯顿没有在打字稿中登录到控制台的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中的猫鼬userschema.methods中使用“this”

温斯顿不能漂亮地打印到控制台

如何在打字稿中没有运行时副作用的情况下进行精确的类型检查?

有没有更好的方法在打字稿中编写这种递归方法

温斯顿:尝试在没有传输的情况下写入日志 - 使用默认记录器

在nodejs和打字稿中使用变量到静态方法