NodeJS - 将 Winston 记录到 OSX 上的 syslog

Posted

技术标签:

【中文标题】NodeJS - 将 Winston 记录到 OSX 上的 syslog【英文标题】:NodeJS - Logging Winston out to syslog on OSX 【发布时间】:2017-12-18 17:07:11 【问题描述】:

我几天来一直试图让我的 NodeJS 应用程序登录到 syslog,但没有明显成功:

const winston = require('winston');
require('winston-syslog').Syslog; // eslint-disable-line

const env = process.env.NODE_ENV;
let syslogConfig = 
    "host": "localhost",
    "port": 514,
    "protocol": "unix",
    "path": "/var/run/syslog"
;

const logger = new winston.Logger(
    levels: winston.config.syslog.levels,
    colors: winston.config.syslog.colors
);

logger.add(winston.transports.Syslog, syslogConfig);

logger.add(winston.transports.Console, 
    json: false,
    colorize: true,
    timestamp: true
);

logger.error('Hello, world!');

module.exports = logger;

当这段代码运行时,我的终端没有任何错误(它编译得很好,我在终端输出中看到“Hello,world!”)但我从未在我的 OSX 控制台应用程序中看到syslog 进程下记录的任何内容.

另一方面,我可以在终端中手动运行syslog -s -l ERROR “Hello, world.”,它会显示在控制台应用程序中。

我很困惑——我正在运行 OSX Sierra (10.12.6)

【问题讨论】:

嗨!您找到解决此问题的方法了吗? 不。当我部署到 Linux 服务器时,我的日志似乎出现在 syslog 中,但它们从未出现在 OSX 控制台应用程序中。 谢谢。我有非常相似的分辨率。在我使用unix 协议的情况下,除了严重性为infodebug 的日志外,日志看起来都很好,我说的是syslog 严重性设置。当我开始使用udp 协议将日志推送到 linux 时,一切都按预期工作。 【参考方案1】:

这条消息已经有好几年了。 我终于得到了一些工作,所以我想我应该分享一下:

const winston = require('winston')
require('winston-syslog').Syslog

// Logger creation
const logger = winston.createLogger(
  levels: winston.config.syslog.levels,
)

// Console feedback
logger.add(
  new winston.transports.Console(
    name: 'consoleLogs'
  )
)

// Sending to syslog
logger.add(
  new winston.transports.Syslog(
    protocol: 'unix',
    path: '/var/run/syslog'
  )
)

// Test message
logger.alert('Hello world!!')

我可以看到消息/var/log/system.log

【讨论】:

以上是关于NodeJS - 将 Winston 记录到 OSX 上的 syslog的主要内容,如果未能解决你的问题,请参考以下文章

需要 Morgan 和 Winston 使用 btyesize 记录 api 响应

NodeJS winston 日志文件不会因大小限制而改变

温斯顿记录器在nodejs中不起作用

NestJS 使用默认记录器或 npm(如 winston)登录文件、数据库等

Winston:了解日志记录级别

如果我使用自定义记录器功能而不是使用像winston或log4js这样的库,是否会影响Node服务器的性能?