hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
    • 小程序
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
    • 圆角边框锯齿问题
    • 各国语言正则
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
    • 小程序
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
    • 圆角边框锯齿问题
    • 各国语言正则
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

  • JavaScript

  • Vue

  • 混合开发

    • 搭建一个极简混合开发架构
    • cordova源码解读
    • Node Addon
    • 使用 websocket 和 electron 搭建一个跨全平台的聊天软件
    • electron 日志接入
      • 接入方案
      • 接入实例
      • 日志输出载体
        • 1、控制台
        • 2、文件
        • 3、远端
      • 日志格式化
        • 模版
        • 函数
        • 格式
      • 日志文件位置
      • 日志等级
  • 学习笔记

  • 小程序

  • 前端
  • 混合开发
hn-failte
2023-12-26

electron 日志接入

# electron 日志接入

# 接入方案

第三方开源库 + 二次开发

考虑到技术的成熟性、稳定性、效率,采用第三方成熟的开源库是比较好的方案。

而在众多 npm 包中,electron-log 的匹配度、更新时间与下载量以碾压态比下了其他的第三方库。

从功能上评估,electron-log 提供了本地日志写入与远端日志上报功能,在主要功能上是满足需求的。

虽然第三方库提供的功能较为齐全,但是这并不能避免后续会产生其他的定制,因此,最理想的方案是基于第三方开源库二次开发。

但是在实施上,可以先接入 electron-log,后期不修改日志记录方式的基础上,做个性化,完成后只需要替换包即可。

下面,先熟悉 electron-log 的基础,以该套成熟方案作为基石。

从官网 electron-log 官方包说明上得知,electron 13以下的版本需使用4.x及以下的版本,反之推荐使用5.x的版本,因此这里取4.4.8版本的 electron-log

# 接入实例

1、安装依赖包

yarn add electron-log@^4.4.0 or npm i electron-log@^4.4.0

2、编辑基本日志配置

logger.ts

import { app } from 'electron'
import logger from 'electron-log'
const path = require('path')

const useLogger = (isDevelopment: boolean) => {
  /**
   * @desc app 启动时的时间
   * @example 若 app 在前一天打开,一直运行到第二天,第二天的日志将存储在前一天
   */
  const appRunDate = new Date()
  /**
   * @desc 日志文件名
   * @example {date}.log
   */
  const logFileName = `${appRunDate.getFullYear()}-${appRunDate.getMonth() + 1}-${appRunDate.getDate()}.log`

  /**
   * @desc 日志文件位置
   * @example macOS: ~/Library/Logs/{appName}/{appVersion}/{date}.log
   * @example Windows: %USERPROFILE%\AppData\Roaming\{appName}\logs\{appVersion}\{date}.log
   */
  const logFilePath: string = path.resolve(app.getPath('logs'), app.getVersion(), logFileName)

  logger.transports.console.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}' // 设置日志内容格式

  logger.transports.file.level = isDevelopment ? 'silly' : 'verbose' // 配置 silly 时表示所有日志都写入文件
  logger.transports.file.maxSize = 10 * 1024 * 1024 // 最大不超过10M
  logger.transports.file.fileName = logFileName
  logger.transports.file.resolvePath = () => logFilePath

  logger.verbose('Logger is ready');
}

export default useLogger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

3、接入到 main 线程

background.ts

import useLogger from '@/main/logger'

const isDevelopment = process.env.NODE_ENV !== 'production'

useLogger(isDevelopment)
1
2
3
4
5

该文件对应主线程,在主线程中,仅需添加一个引用即可

4、接入 renderer 线程

src/preload.ts

const log = require('electron-log')

window.log = log.functions
1
2
3

首先添加 preload 文件

vue.config.js

module.exports = defineConfig({
  pluginOptions: {
    electronBuilder: {
      preload: 'src/preload.ts',
    }
  }
}
1
2
3
4
5
6
7

其次,为了能解析 preload 文件,添加如上配置

methods.ts

config.webPreferences = {
  preload: path.resolve(__dirname, 'preload')
}
1
2
3

最后,在创建窗口时,将 preload 文件进行加载

至此,整个接入就完成了

# 日志输出载体

这里的日志输出载体主要分为几种:控制台、文件、远端

# 1、控制台

main线程和renderer线程的日志在其对应的控制台查看

可以通过 logger.transports.console 对其进行配置

# 2、文件

记录日志到文件

可以通过 logger.transports.file 对其进行配置

# 3、远端

记录日志到远端

可以通过 logger.transports.remote 对其进行配置

这里远端暂时先不配置,后续迭代再接入

# 日志格式化

# 模版

1、内置模版变量

官方提供了模版变量供使用

Name Value
level Logging level
text Serialized log message
processType browser or renderer
y Year
m Month
d Day
h Hour
i Minute
s Second
ms Millisecond
z Timezone offset
iso date.toISOString()

2、自定义变量

若官方变量无法满足,也可以自定义

log.variables.label = 'dev';
log.transports.console.format = '[{h}:{i}:{s}.{ms}] [{label}] {text}';
1
2

# 函数

另外,官方还提供了函数的方式来进行格式化

log.transports.console.format = (message) => {
  return util.format.apply(util, message.data);
}
1
2
3

# 格式

这里定义格式为:[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}

# 日志文件位置

这里,直接取 app.getPath('logs'),该路径在 macOS 代表~/Library/Logs/{appName}/{appVersion}/{date}.log,在 Windows为%USERPROFILE%\AppData\Roaming\{appName}\logs\{appVersion}\{date}.log

# 日志等级

error、warn、info、verbose、debug、silly

以上等级,从左到右依次降低。配置某等级的报错时,只有高于或等于该等级的报错才会被记录或上报

silly 等级最低,一般用于表示只需要在控制台打印,但不需要写入文件的日志(需配置)

此外,官方也提供了自定义等级的方法

编辑 (opens new window)
#electron
上次更新: 2024/01/26, 18:22:27
使用 websocket 和 electron 搭建一个跨全平台的聊天软件
《JavaScript教程》笔记

← 使用 websocket 和 electron 搭建一个跨全平台的聊天软件 《JavaScript教程》笔记→

最近更新
01
safari 兼容问题笔记
01-26
02
vue3-template-compile
11-24
03
1px圆角边框锯齿问题
10-26
更多文章>
Theme by Vdoing | Copyright © 2017-2024 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式