如何在Winston时间戳中更改时区?Node.js

8

我该如何在此代码中更改时区?我尝试了一些代码,但对我来说并不成功。我编写了一些用于此目的的函数。例如:

const timezoned = () => {
    return new Date().toLocaleString('en-US', {
      timeZone: 'Europe/Istanbul'
    });

这是我的代码;

const winston  = require('winston');
const { format, level, prettyPrint } = require('winston');
require('winston-daily-rotate-file');
 
  var transport = new (winston.transports.DailyRotateFile)({
    filename: 'application-%DATE%.log',
    datePattern: 'YYYY-MM-DD-HH',
    zippedArchive: true,
    maxSize: '1g',
    format:format.combine(format.timestamp(),format.prettyPrint()),
    level: 'info'
  });
 
  transport.on('rotate', function(oldFilename, newFilename) {
    // do something fun
  });
 
  var logger = winston.createLogger({
    transports: [
      transport
    ]
  });
 
  };
  module.exports.logger = logger;
 
1个回答

14

您可以将格式值传递给时间戳格式化程序,这可以是字符串或函数。

详情请参见:https://github.com/winstonjs/logform#timestamp

因此,我们可以使用您的时区函数,并且时间将以欧洲/伊斯坦布尔时间显示,尽管格式为美国格式(因为有'en-US'语言环境设置,您可以根据需要更改)。

const winston  = require('winston');
const { format, level, prettyPrint } = require('winston');

const timezoned = () => {
    return new Date().toLocaleString('en-US', {
        timeZone: 'Europe/Istanbul'
    });
}

require('winston-daily-rotate-file');

var transport = new (winston.transports.DailyRotateFile)({
    filename: 'application-%DATE%.log',
    datePattern: 'YYYY-MM-DD-HH',
    zippedArchive: true,
    maxSize: '1g',
    format:format.combine(format.timestamp({ format: timezoned }),format.prettyPrint()),
    level: 'info'
});

transport.on('rotate', function(oldFilename, newFilename) {
    // do something fun
});

var logger = winston.createLogger({
    transports: [
    transport
    ]
});

module.exports.logger = logger;

输出结果将会像这样:

{
    message: 'Log test',
    level: 'info',
    timestamp: '7/16/2020, 12:34:40 PM'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接