ServerLogging

Logging

Colyseus allows you to import a logger variable, which is customizable via its initial settings.

import { logger } from "@colyseus/core";
// ...
 
logger.debug("this is debug");
logger.log("this is a log");
logger.info("this is information");
logger.warn("this is a warning");
logger.error("this is an error");

By default, the logger instance is just an alias to console. You may want to use a different logger than console for a number of different reasons, such as:

  • External logging storage
  • Configure different logging levels
  • Customize logging output
  • (…) more!

Customizing the logger

import { defineServer } from "colyseus";
 
const server = defineServer({
  // ...
  logger: yourPreferredLoggerInstance,
  // ...
});

Chosing your preferred logger

The Node.js ecosystem has a few different logging solutions, each of them has its own advantages and disadvantages, such as:


Using pino as your logger

Install the pino module:

npm install --save pino

Configure it in your application:

import { defineServer } from "colyseus";
import pino from "pino";
 
const server = defineServer({
  // ...
  logger: pino({
    level: 50,
    msgPrefix: '[HTTP] '
  }),
  // ...
});

Using winston as your logger

Install the winston module:

npm install --save winston

Configure it in your application:

import { defineServer } from "colyseus";
import winston from "winston";
 
const server = defineServer({
  // ...
  logger: winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    defaultMeta: { service: 'user-service' },
    transports: [
      //
      // - Write all logs with importance level of `error` or less to `error.log`
      // - Write all logs with importance level of `info` or less to `combined.log`
      //
      new winston.transports.File({ filename: 'error.log', level: 'error' }),
      new winston.transports.File({ filename: 'combined.log' }),
    ],
  }),
  // ...
});