diff --git a/desktop/flipper-common/src/server-types.tsx b/desktop/flipper-common/src/server-types.tsx index 0c870aab9..2472828f6 100644 --- a/desktop/flipper-common/src/server-types.tsx +++ b/desktop/flipper-common/src/server-types.tsx @@ -24,6 +24,7 @@ import { ProcessConfig, Settings, } from './settings'; +import {LoggerInfo} from './utils/Logger'; // In the future, this file would deserve it's own package, as it doesn't really relate to plugins. // Since flipper-plugin however is currently shared among server, client and defines a lot of base types, leaving it here for now. @@ -135,6 +136,7 @@ export type FlipperServerEvents = { }; 'plugins-server-add-on-message': ExecuteMessage; 'download-file-update': DownloadFileUpdate; + 'server-log': LoggerInfo; }; export type IOSDeviceParams = { diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index 8631eb58c..4c88dfb8c 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -72,7 +72,7 @@ const rootDir = argv.bundler const staticDir = path.join(rootDir, 'static'); async function start() { - initializeLogger(staticDir); + const enhanceLogger = initializeLogger(staticDir); let keytar: any = undefined; try { @@ -107,6 +107,11 @@ async function start() { keytar, 'external', ); + + enhanceLogger((logEntry) => { + flipperServer.emit('server-log', logEntry); + }); + const companionEnv = await initCompanionEnv(flipperServer); if (argv.failFast) { flipperServer.on('server-state', ({state}) => { diff --git a/desktop/flipper-server/src/logger.tsx b/desktop/flipper-server/src/logger.tsx index 41a3da06a..9fcb91249 100644 --- a/desktop/flipper-server/src/logger.tsx +++ b/desktop/flipper-server/src/logger.tsx @@ -88,8 +88,15 @@ export function initializeLogger(staticDir: string) { const logger = createLogger(); setLoggerInstance(logger); + let onConsoleEntry: ((entry: LoggerInfo) => void) | undefined; + const file = fs.createWriteStream(path.join(staticDir, loggerOutputFile)); consoleProxy((entry: LoggerInfo) => { file.write(`${JSON.stringify(entry)}\n`); + onConsoleEntry?.(entry); }); + + return (newOnConsoleEntry: (entry: LoggerInfo) => void) => { + onConsoleEntry = newOnConsoleEntry; + }; } diff --git a/desktop/flipper-ui-browser/src/index.tsx b/desktop/flipper-ui-browser/src/index.tsx index 5a06cc8b2..5c1d18352 100644 --- a/desktop/flipper-ui-browser/src/index.tsx +++ b/desktop/flipper-ui-browser/src/index.tsx @@ -45,6 +45,14 @@ async function start() { }, ); + flipperServer.on('server-log', (logEntry) => { + console[logEntry.type]( + `[${logEntry.namespace}] (${new Date( + logEntry.time, + ).toLocaleTimeString()}): ${logEntry.msg}`, + ); + }); + await flipperServer.connect(); const flipperServerConfig = await flipperServer.exec('get-config');