Stream server logs to browser

Summary: Makes Flipper Logs tab functional for Flipper Browser

Reviewed By: lblasa

Differential Revision: D37459924

fbshipit-source-id: 4ebf3d47fbbf90bb367e01986b12dec782b03c34
This commit is contained in:
Andrey Goncharov
2022-06-28 06:27:43 -07:00
committed by Facebook GitHub Bot
parent c1d959d62e
commit dcbc7c40bb
4 changed files with 23 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ import {
ProcessConfig, ProcessConfig,
Settings, Settings,
} from './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. // 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. // 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; 'plugins-server-add-on-message': ExecuteMessage;
'download-file-update': DownloadFileUpdate; 'download-file-update': DownloadFileUpdate;
'server-log': LoggerInfo;
}; };
export type IOSDeviceParams = { export type IOSDeviceParams = {

View File

@@ -72,7 +72,7 @@ const rootDir = argv.bundler
const staticDir = path.join(rootDir, 'static'); const staticDir = path.join(rootDir, 'static');
async function start() { async function start() {
initializeLogger(staticDir); const enhanceLogger = initializeLogger(staticDir);
let keytar: any = undefined; let keytar: any = undefined;
try { try {
@@ -107,6 +107,11 @@ async function start() {
keytar, keytar,
'external', 'external',
); );
enhanceLogger((logEntry) => {
flipperServer.emit('server-log', logEntry);
});
const companionEnv = await initCompanionEnv(flipperServer); const companionEnv = await initCompanionEnv(flipperServer);
if (argv.failFast) { if (argv.failFast) {
flipperServer.on('server-state', ({state}) => { flipperServer.on('server-state', ({state}) => {

View File

@@ -88,8 +88,15 @@ export function initializeLogger(staticDir: string) {
const logger = createLogger(); const logger = createLogger();
setLoggerInstance(logger); setLoggerInstance(logger);
let onConsoleEntry: ((entry: LoggerInfo) => void) | undefined;
const file = fs.createWriteStream(path.join(staticDir, loggerOutputFile)); const file = fs.createWriteStream(path.join(staticDir, loggerOutputFile));
consoleProxy((entry: LoggerInfo) => { consoleProxy((entry: LoggerInfo) => {
file.write(`${JSON.stringify(entry)}\n`); file.write(`${JSON.stringify(entry)}\n`);
onConsoleEntry?.(entry);
}); });
return (newOnConsoleEntry: (entry: LoggerInfo) => void) => {
onConsoleEntry = newOnConsoleEntry;
};
} }

View File

@@ -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(); await flipperServer.connect();
const flipperServerConfig = await flipperServer.exec('get-config'); const flipperServerConfig = await flipperServer.exec('get-config');