前言
因为在做一款Electron应用,需要记录任务执行日志并保存到本地,用conslog也能实现,但是需要自己手写写入本地文件,不想写,就想起了electron-log这款日志工具。
Electron-log NPM地址:
electron-logwww.npmjs.com/package/electron-log编辑
Electron-log Github地址:
https://github.com/megahertz/electron-loggithub.com/megahertz/electron-log
以下文档主要来自英文原版的翻译,也包含自己的一些理解,如有需要,直接移步上面地址自行阅读英文原版介绍!
Electron-log是干什么的?
它只是Electron和NW.js应用中的一个简单的日志模块。没有任何依赖,没有复杂的配置,只需要require就可以使用。而且它不仅可以用于Electron应用中也可以用在任何node.js的应用中。
默认日志会被记录在如下位置:
on Linux: ~/.config/{app name}/logs/{process type}.log
on macOS: ~/Library/Logs/{app name}/{process type}.log
on Windows: %USERPROFILE%\AppData\Roaming\{app name}\logs\{process type}.log
安装
npm install electron-log
使用
const log = require('electron-log');
log.info('Hello, log');
log.warn('Some problem appears');
electron-log v2.x,v3.x升级到v4.x
如果你当前使用的是v2.x或者v3.x,想升级到v4.x请仔细阅读迁移指南(
)和更新日志。
日志等级
electron-log包含如下日志等级:
error, warn, info, verbose, debug, silly
疑问:前五个都是常用的,但是silly没有见过,如果有人知道,欢迎在文章下方留言,分享一二!
nodeintegration
如果在渲染编译过程中遇到require is not defined错误,请阅读nodeintegration(
)
Transport
Transport(运输)是一个处理日志消息的简单函数。默认它会输出在控制台和文件。
如果你改变了Transport的一些选项,请确保主进程和渲染进程都被应用了。
你可以通过如下函数设置Transport选项:
log.transports.console.format = '{h}:{i}:{s} {text}';
log.transports.file.getFile();
Console transport
在应用主进程控制台或者渲染进程(DevTools)打印日志。
选项
- format,默认 '%c{h}:{i}:{s}.{ms}%c › {text}' (main), '{h}:{i}:{s}.{ms} › {text}' (renderer)
- level,默认 silly
- useStyles,在主进程中使用样式,即使没有附加TTY,默认为null(疑问:这个没有看懂,如果有人知道,欢迎在文章下方留言,分享一二)
File transport
file transport将日志写入到文件。
选项
- format,默认 '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'
- level,默认 silly
- resolvePath 函数设置日志路径,例如:
log.transports.file.resolvePath = () => path.join(APP_DATA, 'logs/main.log');
更多File transport信息,请查阅:
IPC transport
当在渲染进程内部进行日志记录时,它还会显示应用程序控制台中的日志,反之亦然。这种传输可能会影响性能,因此在打包应用程序中默认禁用它。
如果你不在主进程中使用电子日志,但想在控制台中显示渲染器日志,在主代码的某处添加require(' electronic -log')。
选项
- level,默认 silly
Remote transport
把logmessage放进body中,然后给一个目的url发送post方式的json请求。
选项
- level 默认 false
- url 远程url(目标url)
更多Remote transport信息,请查阅:
Disable a transport
只设置属性为false就可以禁用,例如:
log.transports.file.level = false;
log.transports.console.level = false;
覆盖或者自定义transport
transport只是一个匿名函数,覆盖或者添加自定义transport,请查阅:
覆盖consloe.log
有时electron-log替代consloe.log是很有用的,如下:
console.log = log.log;
如果你想覆盖其他方法,像error,warn可以这样写:
Object.assign(console, log.functions);
颜色
颜色配置可以应用在主进程和渲染进程的DevTools的控制台中。
http://log.info('%cRed text. %cGreen text', 'color: red', 'color: green')
可用的颜色:
- unset(重置到默认颜色)
- black(黑色)
- red(红色)
- green(绿色)
- yellow(黄色)
- blue(蓝色)
- magenta(品红色)
- cyan(青色)
- white(白色)
在DevTools控制台你可以使用css属性。
捕获错误
electron-log可以捕获记录未定义错误/拒绝:
log.catchErrors(options?);
更多信息:
钩子
在某些情况下,您可能希望更多地控制日志记录。钩子是在每次传输调用时调用的函数。
(message: LogMessage, transport: Transport) => LogMessage
更多信息:
多种日志实例
你可以创建不同的实例来采用不同的配置:
const electronLog = require('electron-log');
const log = electronLog.create('anotherInstance');
日志作用域
const log = require('electron-log');
const userLog = log.scope('user');
userLog.info('message with user scope');
// Prints 12:12:21.962 (user) › message with user scope
Web worker
可以在Web Worker中使用该模块。然而,ipc传输是不活跃的,所以来自worker的日志消息不会显示在主应用程序控制台中。
相关
electron-cfg:
https://github.com/megahertz/electron-cfggithub.com/megahertz/electron-cfg
设置你的Electron应用