• Stars
    star
    1,128
  • Rank 41,247 (Top 0.9 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 8 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Just a simple logging module for your Electron application

electron-log

Tests NPM version Downloads

New v5 beta is ready and I would be grateful for any feedbacks.

Simple logging module Electron/Node.js/NW.js application. No dependencies. No complicated configuration.

By default, it writes logs to the following locations:

  • on Linux: ~/.config/{app name}/logs/main.log
  • on macOS: ~/Library/Logs/{app name}/main.log
  • on Windows: %USERPROFILE%\AppData\Roaming\{app name}\logs\main.log

Installation

Currently, electron-log v5 is in a beta phase. It requires Electron 13+ or Node.js 14+. Feel free to use electron-log v4 for older runtime. v4 supports Node.js 0.10+ and almost any Electron build.

Install with npm:

npm install electron-log@beta

Usage

Main process

import log from 'electron-log/main';

// Optional, initialize the logger for any renderer process
log.initialize({ preload: true });

log.info('Log from the main process');

Renderer process

If a bundler is used, you can just import the module:

import log from 'electron-log/renderer';
log.info('Log from the renderer process');

Without a bundler, you can use a global variable __electronLog. It contains only log functions like info, warn and so on.

There are a few other options how a logger can be initialized for a renderer process. Read more.

electron-log v2.x, v3.x, v4.x

If you would like to upgrade to the latest version, read the migration guide and the changelog.

Log levels

electron-log supports the following log levels:

error, warn, info, verbose, debug, silly

Transport

Transport is a simple function which does some work with log message. By default, two transports are active: console and file.

You can set transport options or use methods using:

log.transports.console.format = '{h}:{i}:{s} {text}';

log.transports.file.getFile();

Each transport has level and transforms options.

Console transport

Just prints a log message to application console (main process) or to DevTools console (renderer process).

Options
  • format, default '%c{h}:{i}:{s}.{ms}%c β€Ί {text}' (main), '{h}:{i}:{s}.{ms} β€Ί {text}' (renderer)
  • level, default 'silly'
  • useStyles, force enable/disable styles

Read more about console transport.

File transport

The file transport writes log messages to a file.

Options
  • format, default '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'
  • level, default 'silly'
  • resolvePathFn function sets the log path, for example
log.transports.file.resolvePathFn = () => path.join(APP_DATA, 'logs/main.log');

Read more about file transport.

IPC transport

It displays log messages from main process in the renderer's DevTools console. By default, it's disabled for a production build. You can enable in the production mode by setting the level property.

Options
  • level, default 'silly' in the dev mode, false in the production.

Remote transport

Sends a JSON POST request with LogMessage in the body to the specified url.

Options
  • level, default false
  • url, remote endpoint

Read more about remote transport.

Disable a transport

Just set level property to false, for example:

log.transports.file.level = false;
log.transports.console.level = false;

Override/add a custom transport

Transport is just a function (msg: LogMessage) => void, so you can easily override/add your own transport. More info.

Overriding console.log

Sometimes it's helpful to use electron-log instead of default console. It's pretty easy:

console.log = log.log;

If you would like to override other functions like error, warn and so on:

Object.assign(console, log.functions);

Colors

Colors can be used for both main and DevTools console.

log.info('%cRed text. %cGreen text', 'color: red', 'color: green')

Available colors:

  • unset (reset to default color)
  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white

For DevTools console you can use other CSS properties.

Catch errors

electron-log can catch and log unhandled errors/rejected promises:

log.errorHandler.startCatching(options?);

More info.

Hooks

In some situations, you may want to get more control over logging. Hook is a function which is called on each transport call.

(message: LogMessage, transport: Transport, transportName) => LogMessage

More info.

Multiple logger instances

You can create multiple logger instances with different settings:

import log from 'electron-log';

const anotherLogger = log.create('anotherInstance');

Be aware that you need to configure each instance (e.g. log file path) separately.

Logging scopes

import log from 'electron-log';
const userLog = log.scope('user');

userLog.info('message with user scope');
// Prints 12:12:21.962 (user) β€Ί message with user scope

Related

More Repositories

1

electron-simple-updater

Simple way to enable update for the electron application
JavaScript
358
star
2

guzzle-tor

This Guzzle middleware allows to use Tor client as a proxy
PHP
67
star
3

electron-simple-publisher

Simple way to publish releases for electron-simple-updater
JavaScript
65
star
4

react-simple-wysiwyg

Simple and lightweight React WYSIWYG editor
TypeScript
60
star
5

howfat

Shows how fat is a package
JavaScript
59
star
6

electron-cfg

Simple key-value storage for electron
JavaScript
33
star
7

spech

Check your text for grammar and spelling mistakes using multiple providers
JavaScript
31
star
8

react-media-slider

React Slider for HTML5 audio and video
JavaScript
15
star
9

twigjs-loader

twig.js loader for Webpack
JavaScript
13
star
10

gulp-task-doc

Make gulp task documentation (help) easy - just write javascript comments
JavaScript
9
star
11

electron-call

The easiest main-renderer IPC communication
JavaScript
8
star
12

jquery.get-word-by-event

jQuery GetWordByEvent plugin
JavaScript
7
star
13

clipboard-share

Share clipboard between two computers
JavaScript
7
star
14

pascal-nodejs-ipc

Free Pascal library for communicating with a parent Node.js process through IPC
Pascal
5
star
15

nginx-letsencrypt

Nginx with auto-renewal Let’s Encrypt script in a single Docker container
Shell
5
star
16

mongoomig

Yet another mongoose migration tool
JavaScript
4
star
17

if-prod

Conditional running of npm scripts depending on environment
Shell
3
star
18

gulp-audiosprite

Gulp wrapper for audiosprite, which is ffmpeg wrapper that will take in multiple audio files and combines them into a single file
JavaScript
3
star
19

samarkand-guide

samarkand-guide.com website
TypeScript
3
star
20

mg-model

Simple and lightweight angular model library
JavaScript
2
star
21

mongo-backup-alpine

Simple MongoDB backup service in Docker
Shell
2
star
22

node-purified-image

Load, save and draw on image with API similar to HTML Canvas Context 2D. No native dependencies.
JavaScript
2
star
23

letssl

Simple way to retrieve SSL certificate using HTTP ACME challenge
JavaScript
1
star
24

fvm

Free Pascal Version Manager: Simple bash script to manage multiple active Free Pascal Compiler versions
Shell
1
star
25

webunit

Yii 1 PHPUnit web interface
CSS
1
star
26

package-options

The single point to load options for your node package
JavaScript
1
star
27

mongoose-model

Define your mongoose models easily with Typescript
TypeScript
1
star
28

humile

Make Jasmine Great Again!
JavaScript
1
star
29

monitor-test

Just a tiny HTML monitor test
HTML
1
star
30

mg-translate

Simple and lightweight (3kb) angular translate library with format similar to yii or drupal
JavaScript
1
star
31

s3u

S3 URL manipulation helper
JavaScript
1
star
32

secrypt

Tool for keeping repository secrets encrypted
JavaScript
1
star