From 1052384154683aa02aff292cc424a6261d0deea1 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Thu, 30 Jun 2022 07:01:40 -0700 Subject: [PATCH] Add log rotating to flipper-server Summary: CHANGELOG: Rotate flipper-server logs Otherwise, they re going to eat up all space eventually in a one monstrous file Reviewed By: passy Differential Revision: D37516868 fbshipit-source-id: 478a61c56ec007e4a3d695f7e6df2a61cb33c33a --- desktop/.gitignore | 2 ++ desktop/flipper-server/package.json | 11 +++++----- desktop/flipper-server/src/index.tsx | 2 +- desktop/flipper-server/src/logger.tsx | 31 ++++++++++++++++++++++----- desktop/yarn.lock | 12 +++++++++++ 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/desktop/.gitignore b/desktop/.gitignore index 9fcfde761..01c65767f 100644 --- a/desktop/.gitignore +++ b/desktop/.gitignore @@ -12,3 +12,5 @@ node_modules/ .env tsc-error.log /flipper-server/static/ +/static/flipper-server-log* +/static/.audit.json diff --git a/desktop/flipper-server/package.json b/desktop/flipper-server/package.json index 6bc462275..344e0cc30 100644 --- a/desktop/flipper-server/package.json +++ b/desktop/flipper-server/package.json @@ -13,21 +13,22 @@ "@types/express": "^4.17.13", "@types/http-proxy": "^1.17.8", "@types/node": "^17.0.31", - "exit-hook": "^2.1.1", - "http-proxy": "^1.18.1", "chalk": "^4", + "exit-hook": "^2.1.1", "express": "^4.17.3", + "file-stream-rotator": "^0.6.1", "flipper-common": "0.0.0", "flipper-pkg-lib": "0.0.0", + "flipper-server-companion": "0.0.0", "flipper-server-core": "0.0.0", "fs-extra": "^10.1.0", - "flipper-server-companion": "0.0.0", + "http-proxy": "^1.18.1", "metro": "^0.70.2", "open": "^8.3.0", "p-filter": "^2.1.0", - "yargs": "^17.4.1", "ws": "^8.5.0", - "xdg-basedir": "^4" + "xdg-basedir": "^4", + "yargs": "^17.4.1" }, "peerDependencies": {}, "scripts": { diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index f5d98c593..36b911a14 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -78,7 +78,7 @@ const rootDir = argv.bundler const staticDir = path.join(rootDir, 'static'); async function start() { - const enhanceLogger = initializeLogger(staticDir); + const enhanceLogger = await initializeLogger(staticDir); let keytar: any = undefined; try { diff --git a/desktop/flipper-server/src/logger.tsx b/desktop/flipper-server/src/logger.tsx index 9fcb91249..ed1d6469a 100644 --- a/desktop/flipper-server/src/logger.tsx +++ b/desktop/flipper-server/src/logger.tsx @@ -7,7 +7,6 @@ * @format */ -import * as fs from 'fs-extra'; import path from 'path'; import { LoggerExtractError, @@ -17,6 +16,11 @@ import { Logger, setLoggerInstance, } from 'flipper-common'; +// @ts-expect-error +import fsRotator from 'file-stream-rotator'; +import {ensureFile} from 'fs-extra'; +import {access} from 'fs/promises'; +import {constants} from 'fs'; export const loggerOutputFile = 'flipper-server-log.out'; @@ -81,8 +85,8 @@ const consoleProxy = (proxy: FlipperLogProxy) => { } }; -export function initializeLogger(staticDir: string) { - // Supress debug messages by default. +export async function initializeLogger(staticDir: string) { + // Suppress stdout debug messages, but keep writing them to the file. console.debug = function () {}; const logger = createLogger(); @@ -90,9 +94,26 @@ export function initializeLogger(staticDir: string) { let onConsoleEntry: ((entry: LoggerInfo) => void) | undefined; - const file = fs.createWriteStream(path.join(staticDir, loggerOutputFile)); + const logFilename = path.join(staticDir, loggerOutputFile); + + let logStream: NodeJS.WriteStream | undefined = undefined; + try { + await ensureFile(logFilename); + await access(logFilename, constants.W_OK); + logStream = fsRotator.getStream({ + // Rotation number is going to be added after the file name + filename: logFilename, + // Rotate every 1MB + size: '1m', + // Keep last 5 rotations + max_logs: 20, + }); + } catch (e) { + console.warn('initializeLogger -> cannot write logs to FS', e); + } + consoleProxy((entry: LoggerInfo) => { - file.write(`${JSON.stringify(entry)}\n`); + logStream?.write(`${JSON.stringify(entry)}\n`); onConsoleEntry?.(entry); }); diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 44024b0a3..a49f934f3 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -7313,6 +7313,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-stream-rotator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz#007019e735b262bb6c6f0197e58e5c87cb96cec3" + integrity sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ== + dependencies: + moment "^2.29.1" + file-type@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" @@ -10701,6 +10708,11 @@ moment@^2.15.1, moment@^2.24.0, moment@^2.25.3: resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== +moment@^2.29.1: + version "2.29.3" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" + integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"