11import fs , { createWriteStream } from 'fs' ;
22import path from 'path' ;
33import JSZip from 'jszip' ;
4- import { getHomePath , saveFile , sendLogLine } from '../../ipc/ipc_renderer' ;
4+ import { getHomePath , saveFile } from '../../ipc/ipc_renderer' ;
55import { isRunningInTest } from './index' ;
66import glob from 'glob' ;
77import { app } from 'electron' ;
88
99export enum LogLevel {
1010 Log ,
11- Trace ,
12- Debug ,
1311 Info ,
1412 Warn ,
1513 Error ,
16- GroupCollapsed ,
17- GroupEnd ,
1814}
1915
16+ export const NumericLogLevels = [ LogLevel . Log , LogLevel . Info , LogLevel . Warn , LogLevel . Error ] ;
17+
2018export enum LogSource {
2119 MainProcess ,
2220 RendererProcess ,
21+ ServerProcess ,
2322}
2423
2524export let logFilePath : string | null = null ;
26- let oldLog : ( ( ...args : any [ ] ) => void ) | null = null ;
25+
26+ const buffer : string [ ] = [ ] ;
27+ function write ( str : string ) {
28+ buffer . push ( str ) ;
29+
30+ const try_fn = ( ) => {
31+ if ( process . stdout . writableLength == 0 ) {
32+ process . stdout . write ( buffer . shift ( ) || '' ) ;
33+ } else {
34+ setTimeout ( try_fn , 10 ) ;
35+ }
36+ } ;
37+ try_fn ( ) ;
38+ }
2739
2840function log ( file : number , source : LogSource , level : LogLevel , ...args : any [ ] ) {
2941 const date = new Date ( ) . toISOString ( ) ;
@@ -36,7 +48,23 @@ function log(file: number, source: LogSource, level: LogLevel, ...args: any[]) {
3648 level : level_str ,
3749 args : string_args ,
3850 } ) ;
39- if ( oldLog !== null ) oldLog ( log_line ) ;
51+
52+ const FgGreen = '\x1b[32m' ;
53+ const FgBlue = '\x1b[34m' ;
54+ const FgYellow = '\x1b[33m' ;
55+ const Reset = '\x1b[0m' ;
56+ const source_color = [ FgGreen , FgBlue , FgYellow ] [ source ] ;
57+
58+ write (
59+ args
60+ . join ( '\n' )
61+ . split ( '\n' )
62+ . map (
63+ ( line ) =>
64+ `${ source_color } [${ source_str . substring ( 0 , 4 ) } ]${ Reset } ${ level_str . padEnd ( 5 ) } | ${ line } `
65+ )
66+ . join ( '\n' ) + '\n'
67+ ) ;
4068 fs . writeSync ( file , log_line + '\n' ) ;
4169 fs . fsyncSync ( file ) ;
4270}
@@ -64,24 +92,15 @@ export function initMainProcessLog(): void {
6492 logFilePath = path . join ( log_dir , fileName ) ;
6593 const file = fs . openSync ( logFilePath , 'w' ) ;
6694 console . log ( 'Init logging into' , logFilePath ) ;
67- oldLog = console . log ;
6895 console . log = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Log , ...args ) ;
69- console . trace = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Trace , ...args ) ;
70- console . debug = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Debug , ...args ) ;
96+ console . trace = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Log , ...args ) ;
97+ console . debug = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Log , ...args ) ;
7198 console . info = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Info , ...args ) ;
7299 console . warn = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Warn , ...args ) ;
73100 console . error = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Error , ...args ) ;
74101 logLine = ( ...args ) => log ( file , ...args ) ;
75- const oldGroupCollapsed = console . groupCollapsed ;
76- console . groupCollapsed = ( ...args ) => {
77- log ( file , LogSource . MainProcess , LogLevel . GroupCollapsed , ...args ) ;
78- oldGroupCollapsed ( ...args ) ;
79- } ;
80- const oldGroupEnd = console . groupEnd ;
81- console . groupEnd = ( ...args ) => {
82- log ( file , LogSource . MainProcess , LogLevel . GroupEnd , ...args ) ;
83- oldGroupEnd ( ...args ) ;
84- } ;
102+ console . groupCollapsed = ( ) => { } ;
103+ console . groupEnd = ( ) => { } ;
85104}
86105
87106export async function exportDebugLogsToDisk ( file : string ) : Promise < void > {
@@ -108,25 +127,3 @@ export async function exportDebugLogsToDisk(file: string): Promise<void> {
108127 . on ( 'error' , reject ) ;
109128 } ) ;
110129}
111-
112- type KeyOfType < T , V > = keyof {
113- [ P in keyof T as T [ P ] extends V ? P : never ] : any ;
114- } ;
115-
116- function _mapLogFn ( key : KeyOfType < typeof console , ( ...args : any [ ] ) => void > , level : LogLevel ) {
117- const _oldFn : ( ...args : any [ ] ) => void = console [ key ] ;
118- console [ key ] = ( ...args : any [ ] ) => {
119- _oldFn ( ...args ) ;
120- sendLogLine ( level , ...args ) ;
121- } ;
122- }
123- export function initRendererLog ( ) : void {
124- _mapLogFn ( 'log' , LogLevel . Log ) ;
125- _mapLogFn ( 'trace' , LogLevel . Trace ) ;
126- _mapLogFn ( 'debug' , LogLevel . Debug ) ;
127- _mapLogFn ( 'info' , LogLevel . Info ) ;
128- _mapLogFn ( 'warn' , LogLevel . Warn ) ;
129- _mapLogFn ( 'error' , LogLevel . Error ) ;
130- _mapLogFn ( 'groupCollapsed' , LogLevel . GroupCollapsed ) ;
131- _mapLogFn ( 'groupEnd' , LogLevel . GroupEnd ) ;
132- }
0 commit comments