dev: handle 'console.log' through log service

This commit is contained in:
KernelDeimos
2025-10-16 14:14:55 -04:00
committed by Eric Dubé
parent 13a70f5394
commit abcb2e9580
4 changed files with 42 additions and 13 deletions

View File

@@ -282,7 +282,8 @@ class Extension extends AdvancedBase {
get console () {
const extensionConsole = Object.create(console);
extensionConsole.log = (...a) => {
console.log(`${display_time(new Date())} \x1B[${this.terminal_color};1m(extension/${this.name})\x1B[0m`, ...a);
const realConsole = globalThis.original_console_object ?? console;
realConsole.log(`${display_time(new Date())} \x1B[${this.terminal_color};1m(extension/${this.name})\x1B[0m`, ...a);
};
return extensionConsole;
}

View File

@@ -122,7 +122,7 @@ class LogContext {
typeof fields[k].toLogFields === 'function'
) fields[k] = fields[k].toLogFields();
}
if ( Context.get('injected_logger') ) {
if ( Context.get('injected_logger', { allow_fallback: true }) ) {
Context.get('injected_logger').log(
message + (fields ? ('; fields: ' + JSON.stringify(fields)) : ''),
);
@@ -557,6 +557,31 @@ class LogService extends BaseService {
this.services.logger = this.create('services-container');
globalThis.root_context.set('logger', this.create('root-context'));
{
const util = require('util');
const logger = this.create('console');
if ( ! globalThis.original_console_object ) {
globalThis.original_console_object = console;
}
// Keep console prototype
const logconsole = Object.create(console);
// Override simple log functions
const logfn = level => (...a) => {
logger[level](a.map(arg => {
if ( typeof arg === 'string' ) return arg;
return util.inspect(arg, undefined, undefined, true);
}).join(' '));
};
logconsole.log = logfn('info');
logconsole.warn = logfn('warn');
logconsole.error = logfn('error');
globalThis.console = logconsole;
}
}
/**

View File

@@ -685,6 +685,7 @@ class WebServerService extends BaseService {
*/
// comment above line 497
print_puter_logo_() {
const realConsole = globalThis.original_console_object;
if ( this.global_config.env !== 'dev' ) return;
const logos = require('../../fun/logos.js');
let last_logo = undefined;
@@ -703,10 +704,10 @@ class WebServerService extends BaseService {
lines[i] = ' '.repeat(pad_left) + lines[i] + ' '.repeat(pad_right);
}
const txt = lines.join('\n');
console.log('\n\x1B[34;1m' + txt + '\x1B[0m\n');
realConsole.log('\n\x1B[34;1m' + txt + '\x1B[0m\n');
}
if ( config.os.archbtw ) {
console.log('\x1B[34;1mPuter is running on Arch btw\x1B[0m');
realConsole.log('\x1B[34;1mPuter is running on Arch btw\x1B[0m');
}
}
}

View File

@@ -31,34 +31,36 @@ class NullDevConsoleService extends BaseService {
const longestWithTitle = Math.max(longest, ansi_visible_length(title));
const realConsole = globalThis.original_console_object ?? console;
({
highlighter: () => {
console.log(`\x1B[${colors.bginv}m▐\x1B[0m\x1B[${colors.bg}m ${title} \x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m▐\x1B[0m\x1B[${colors.bg}m ${title} \x1B[0m`);
for ( const line of lines ) {
console.log(`\x1B[${colors.bginv}m▐▌\x1B[0m${line}\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m▐▌\x1B[0m${line}\x1B[0m`);
}
},
highlighter2: () => {
let top = '';
for ( let i = title.length + 2; i < longest+3; i++ ) top += `\x1B[${colors.bginv}m▁\x1B[0m`;
console.log(`\x1B[${colors.bginv}m▐\x1B[0m\x1B[${colors.bg}m ${title}${top || ' '}\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m▐\x1B[0m\x1B[${colors.bg}m ${title}${top || ' '}\x1B[0m`);
for ( const line of lines ) {
const diff = line.length - ansi_visible_length(line);
console.log(`\x1B[${colors.bginv}m▐▌\x1B[0m${line.padEnd(longest + diff)}` +
realConsole.log(`\x1B[${colors.bginv}m▐▌\x1B[0m${line.padEnd(longest + diff)}` +
`\x1B[${colors.bginv}m▐\x1B[0m`);
}
console.log(` \x1B[${colors.bginv}m${Array(longest + 2).fill('▔').join('')}\x1B[0m`);
realConsole.log(` \x1B[${colors.bginv}m${Array(longest + 2).fill('▔').join('')}\x1B[0m`);
},
stars: () => {
const len = longestWithTitle + 1;
const horiz = Array(len).fill('*').join('');
console.log(`\x1B[${colors.bginv}m**${horiz}**\x1B[0m`);
console.log(`\x1B[${colors.bginv}m*\x1B[0m ${(title + ':').padEnd(len)} \x1B[${colors.bginv}m*\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m**${horiz}**\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m*\x1B[0m ${(title + ':').padEnd(len)} \x1B[${colors.bginv}m*\x1B[0m`);
for ( const line of lines ) {
const diff = line.length - ansi_visible_length(line);
console.log(`\x1B[${colors.bginv}m*\x1B[0m ${line.padEnd(len + diff)} \x1B[${colors.bginv}m*\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m*\x1B[0m ${line.padEnd(len + diff)} \x1B[${colors.bginv}m*\x1B[0m`);
}
console.log(`\x1B[${colors.bginv}m**${horiz}**\x1B[0m`);
realConsole.log(`\x1B[${colors.bginv}m**${horiz}**\x1B[0m`);
},
})[style ?? 'highlighter2']();
}