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' ;
@@ -17,13 +17,29 @@ export enum LogLevel {
1717 GroupEnd ,
1818}
1919
20+ export const NumericLogLevels = [ LogLevel . Log , LogLevel . Info , LogLevel . Warn , LogLevel . Error ] ;
21+
2022export enum LogSource {
2123 MainProcess ,
2224 RendererProcess ,
25+ ServerProcess ,
2326}
2427
2528export let logFilePath : string | null = null ;
26- let oldLog : ( ( ...args : any [ ] ) => void ) | null = null ;
29+
30+ const buffer : string [ ] = [ ] ;
31+ function write ( str : string ) {
32+ buffer . push ( str ) ;
33+
34+ const try_fn = ( ) => {
35+ if ( process . stdout . writableLength == 0 ) {
36+ process . stdout . write ( buffer . shift ( ) || '' ) ;
37+ } else {
38+ setTimeout ( try_fn , 10 ) ;
39+ }
40+ } ;
41+ try_fn ( ) ;
42+ }
2743
2844function log ( file : number , source : LogSource , level : LogLevel , ...args : any [ ] ) {
2945 const date = new Date ( ) . toISOString ( ) ;
@@ -36,7 +52,23 @@ function log(file: number, source: LogSource, level: LogLevel, ...args: any[]) {
3652 level : level_str ,
3753 args : string_args ,
3854 } ) ;
39- if ( oldLog !== null ) oldLog ( log_line ) ;
55+
56+ const FgGreen = '\x1b[32m' ;
57+ const FgBlue = '\x1b[34m' ;
58+ const FgYellow = '\x1b[33m' ;
59+ const Reset = '\x1b[0m' ;
60+ const source_color = [ FgGreen , FgBlue , FgYellow ] [ source ] ;
61+
62+ write (
63+ args
64+ . join ( '\n' )
65+ . split ( '\n' )
66+ . map (
67+ ( line ) =>
68+ `${ source_color } [${ source_str . substring ( 0 , 4 ) } ]${ Reset } ${ level_str . padEnd ( 5 ) } | ${ line } `
69+ )
70+ . join ( '\n' ) + '\n'
71+ ) ;
4072 fs . writeSync ( file , log_line + '\n' ) ;
4173 fs . fsyncSync ( file ) ;
4274}
@@ -64,23 +96,18 @@ export function initMainProcessLog(): void {
6496 logFilePath = path . join ( log_dir , fileName ) ;
6597 const file = fs . openSync ( logFilePath , 'w' ) ;
6698 console . log ( 'Init logging into' , logFilePath ) ;
67- oldLog = console . log ;
6899 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 ) ;
100+ console . trace = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Log , ...args ) ;
101+ console . debug = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Log , ...args ) ;
71102 console . info = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Info , ...args ) ;
72103 console . warn = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Warn , ...args ) ;
73104 console . error = ( ...args ) => log ( file , LogSource . MainProcess , LogLevel . Error , ...args ) ;
74105 logLine = ( ...args ) => log ( file , ...args ) ;
75- const oldGroupCollapsed = console . groupCollapsed ;
76106 console . groupCollapsed = ( ...args ) => {
77107 log ( file , LogSource . MainProcess , LogLevel . GroupCollapsed , ...args ) ;
78- oldGroupCollapsed ( ...args ) ;
79108 } ;
80- const oldGroupEnd = console . groupEnd ;
81109 console . groupEnd = ( ...args ) => {
82110 log ( file , LogSource . MainProcess , LogLevel . GroupEnd , ...args ) ;
83- oldGroupEnd ( ...args ) ;
84111 } ;
85112}
86113
@@ -108,25 +135,3 @@ export async function exportDebugLogsToDisk(file: string): Promise<void> {
108135 . on ( 'error' , reject ) ;
109136 } ) ;
110137}
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