pino.js 988 B
Newer Older
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
Amaury Martiny's avatar
Amaury Martiny committed
// This file is part of Parity.
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
import { app } from 'electron';
import fs from 'fs';
import { multistream } from 'pino-multi-stream';
import Pino from 'pino';
import { name } from '../../../../package.json';
Amaury Martiny's avatar
Amaury Martiny committed
// Pino by default outputs JSON. We prettify that.
const pretty = Pino.pretty();
Amaury Martiny's avatar
Amaury Martiny committed
pretty.pipe(process.stdout);

const streams = [];
// In production, create 2 output streams:
// - fether.log file (raw JSON)
Amaury Martiny's avatar
Amaury Martiny committed
// - stdout (prettified output)
const IS_TEST = !app;

if (!IS_TEST) {
  // Create userData folder if it doesn't exist
  try {
    fs.statSync(app.getPath('userData'));
  } catch (e) {
    fs.mkdirSync(app.getPath('userData'));
  }

  streams.push({
Amaury Martiny's avatar
Amaury Martiny committed
    level: 'info',
    stream: fs.createWriteStream(`${app.getPath('userData')}/${name}.log`)
  });
}

streams.push({ level: 'info', stream: pretty });
Amaury Martiny's avatar
Amaury Martiny committed
export default opts => Pino({ name, ...opts }, multistream(streams));