winston日志管理3

Further Reading 延伸阅读

Events and Callbacks in Winston winston的事件和回调

Each instance of winston.Logger is also an instance of an EventEmitter. A log event will be raised each time a transport successfully logs a message:

logger.on(‘logging‘, function (transport, level, msg, meta) {
    // [msg] and [meta] have now been logged at [level] to [transport]
  });

  logger.info(‘CHILL WINSTON!‘, { seriously: true });

Working with multiple Loggers in winston 在winston中使用多个logger

Often in larger, more complex applications it is necessary to have multiple logger instances with different settings. Each logger is responsible for a different feature area (or category). This is exposed in winston in two ways: through winston.loggers and instances of winston.Container. In fact, winston.loggers is just a predefined instance of winston.Container:

定义多个日志文件

1.利用 add方法来增加文件

 var winston = require(‘winston‘);

  //
  // Configure the logger for `category1`
  //
  winston.loggers.add(‘category1‘, {
    console: {
      level: ‘silly‘,
      colorize: true,
      label: ‘category one‘
    },
    file: {
      filename: ‘/path/to/some/file‘
    }
  });

  //
  // Configure the logger for `category2`
  //
  winston.loggers.add(‘category2‘, {
    couchdb: {
      host: ‘127.0.0.1‘,
      port: 5984
    }
  });

Filters and Rewriters 过滤日志和重写

Filters allow modifying the contents of log messages, and Rewriters allow modifying the contents of log meta e.g. to mask data that should not appear in logs.

Filters允许修改日志消息的内容,并且Rewriter允许修改日志元数据的内容。 以屏蔽不应出现在日志中的数据。

Both filters and rewriters are simple Arrays of functions which can be provided when creating a new winston.Logger(options). e.g.:

var logger = new winston.Logger({
  rewriters: [function (level, msg, meta) { /* etc etc */ }],
  filters:   [function (level, msg, meta) { /* etc etc */ }]    //具体怎么定义?????
})

Like any Array they can also be modified at runtime with no adverse side-effects to the winston internals.

logger.filters.push(function(level, msg, meta) {
  return meta.production
    ? maskCardNumbers(msg)
    : msg;
});

logger.info(‘transaction with card number 123456789012345 successful.‘);

This may result in this output:

info: transaction with card number 123456****2345 successful.

这个方法是岁信息处理后,返回的的值,然后在存入日志文件中

Adding Custom Transports  添加自定义Transports

Adding a custom transport is actually pretty easy. All you need to do is accept a couple of options, set a name, implement a log() method, and add it to the set of transports exposed by winston.

添加自定义传输实际上很容易。 所有你需要做的是接受几个选项,设置name,实现log()方法,并将其添加到winston公开的transports。

var util = require(‘util‘),
      winston = require(‘winston‘);

  var CustomLogger = winston.transports.CustomLogger = function (options) {
    //
    // Name this logger
    //
    this.name = ‘customLogger‘;

    //
    // Set the level from your options
    //
    this.level = options.level || ‘info‘;

    //
    // Configure your storage backing as you see fit
    //
  };

  //
  // Inherit from `winston.Transport` so you can take advantage
  // of the base functionality and `.handleExceptions()`.
  //
  util.inherits(CustomLogger, winston.Transport);

  CustomLogger.prototype.log = function (level, msg, meta, callback) {
    //
    // Store this message and metadata, maybe use some custom logic
    // then callback indicating success.
    //
    callback(null, true);
  };

Custom Log Format 日志格式化

To specify custom log format you should set formatter function for transport. Currently supported transports are: Console, File, Memory. Options object will be passed to the format function. It‘s general properties are: timestamp, level, message, meta. Depending on the transport type may be additional properties.

要指定自定义日志格式,您应该为传输设置格式化函数。 当前支持的传输有:Console,File,Memory。 Options对象将被传递给format函数。 它的一般属性是:timestamp,level,message,meta。 根据传输类型可能有其他属性。

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({
      timestamp: function() {
        return Date.now();
      },
      formatter: function(options) {
        // Return string will be passed to logger.
        return options.timestamp() +‘ ‘+ options.level.toUpperCase() +‘ ‘+ (undefined !== options.message ? options.message : ‘‘) +
          (options.meta && Object.keys(options.meta).length ? ‘\n\t‘+ JSON.stringify(options.meta) : ‘‘ );
      }
    })
  ]
});
logger.info(‘Data to log.‘);
时间: 2024-10-06 18:06:18

winston日志管理3的相关文章

winston日志管理1

Usage There are two different ways to use winston: directly via the default logger, or by instantiating your own Logger. The former is merely intended to be a convenient shared logger to use throughout your application if you so choose. 有两种不同的方式使用win

Nodejs日志管理包

Nodejs日志管理工具包:log4js 和 winston 1.log4js的使用 1)package.json中加入依赖 "log4js":"~0.6.21" 2)写一个log4js的配置文件log4js_conf.json { "appenders": [ { "type": "console" }, { "type": "file", "filena

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug.统计等各种用途. slf4j+logback这种实现方式是很常见的,好处自然是方便!.在这篇文章中,你将看到如何使用logback搭建你自己的日志组件并将日志输出到文件.如何查看这些文件.如何为每个线程上的访问分配独有的一个日志id.

linux 学习 14 日志管理

第十四讲 日志管理 14.1 日志管理-简介 1.日志服务 ?在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致. ?rsyslogd的新特点: ?基于TCP网络协议传输日志信息; ?更安全的网络传输方式: ?有日志消息的及时分析框架: ?后台数据库: ?配置文件中可以写简单的逻辑判断: ?与sysl

MySQl Study学习之--MySQl二进制日志管理

MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log):   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库(DML)的语句的执行时间信息    不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能    主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新    用于在主复制服务器上记录所有将发送

ABP日志管理

ABP日志管理 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由东莞-天道提供翻译 Server side(服务器端) ASP.NET Boilerplate使用Castl

SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)

首先我们为什么需要做日志管理,在现实的上线中我们经常会遇到系统出现异常或者问题.这个时候就马上打开CRT或者SSH连上服务器拿日子来分析.受网络的各种限制.于是我们就想为什么不能直接在管理后台查看报错的信息呢.于是日志管理就出现了. 其次个人觉得做日志管理最好的是Aop,有的人也喜欢用拦截器.都可以,在此我重点介绍我的实现方式. Aop有的人说拦截不到Controller.有的人说想拦AnnotationMethodHandlerAdapter截到Controller必须得拦截org.sprin

java程序日志管理

初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题. 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要业务逻辑和功能就好了. 我当初刚入行的时候就有很长一段时间完全不用去关心日志,到后来偶尔涉及到的时候,也都是从其他地方采用cv大法直接搬用. 不过,随着工作时间的变化,随着手头上任务重要程度的变化,也随着接触到的项目数量的变化,让我越来越意识到日志的重要性,它在整个系统中发挥着至关重要的作用! 尤其

Linux的日志管理

Linux日志的管理 日志:记录了你几乎所有的操作记录,用于系统的审核,故障的排除.日志文件永久存放在日志目录中,系统日志保存在/var/log中 rsyslog 按照日志类型分类,把所有日志记录到/var/log目录下. /var/log/messages是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵. /var/log/secure 与安全相关的日志. /var/log/cron 与计划任务相关的日志. /var/log/boot.log与系统启动的相关日志,只保留本次系