@chainsafe/lodestar 1.9.0-dev.cd7709b489 → 1.9.0-dev.f417c35af0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.git-data.json +1 -1
- package/lib/applyPreset.js +7 -1
- package/lib/applyPreset.js.map +1 -1
- package/lib/cli.js +1 -1
- package/lib/cli.js.map +1 -1
- package/lib/cmds/beacon/handler.d.ts +3 -3
- package/lib/cmds/beacon/handler.js +7 -5
- package/lib/cmds/beacon/handler.js.map +1 -1
- package/lib/cmds/beacon/options.d.ts +2 -1
- package/lib/cmds/beacon/options.js.map +1 -1
- package/lib/cmds/dev/options.d.ts +1 -0
- package/lib/cmds/lightclient/handler.js +3 -2
- package/lib/cmds/lightclient/handler.js.map +1 -1
- package/lib/cmds/lightclient/options.d.ts +2 -1
- package/lib/cmds/lightclient/options.js.map +1 -1
- package/lib/cmds/validator/handler.js +6 -4
- package/lib/cmds/validator/handler.js.map +1 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/index.js +19 -13
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/index.js.map +1 -1
- package/lib/cmds/validator/keymanager/decryptKeystoreDefinitions/types.d.ts +2 -2
- package/lib/cmds/validator/options.d.ts +2 -1
- package/lib/cmds/validator/options.js.map +1 -1
- package/lib/cmds/validator/signers/index.d.ts +2 -2
- package/lib/cmds/validator/signers/index.js.map +1 -1
- package/lib/cmds/validator/signers/logSigners.d.ts +2 -2
- package/lib/cmds/validator/signers/logSigners.js.map +1 -1
- package/lib/cmds/validator/slashingProtection/export.d.ts +2 -1
- package/lib/cmds/validator/slashingProtection/export.js +42 -12
- package/lib/cmds/validator/slashingProtection/export.js.map +1 -1
- package/lib/cmds/validator/slashingProtection/import.d.ts +1 -1
- package/lib/cmds/validator/slashingProtection/import.js +5 -4
- package/lib/cmds/validator/slashingProtection/import.js.map +1 -1
- package/lib/cmds/validator/voluntaryExit.js +1 -1
- package/lib/cmds/validator/voluntaryExit.js.map +1 -1
- package/lib/options/beaconNodeOptions/index.d.ts +1 -0
- package/lib/options/beaconNodeOptions/network.d.ts +1 -0
- package/lib/options/beaconNodeOptions/network.js +10 -3
- package/lib/options/beaconNodeOptions/network.js.map +1 -1
- package/lib/options/logOptions.d.ts +11 -1
- package/lib/options/logOptions.js +6 -5
- package/lib/options/logOptions.js.map +1 -1
- package/lib/util/logger.d.ts +7 -23
- package/lib/util/logger.js +53 -80
- package/lib/util/logger.js.map +1 -1
- package/package.json +13 -12
- package/lib/util/loggerConsoleTransport.d.ts +0 -24
- package/lib/util/loggerConsoleTransport.js +0 -35
- package/lib/util/loggerConsoleTransport.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CliCommand } from "../../../util/index.js";
|
|
2
2
|
import { GlobalArgs } from "../../../options/index.js";
|
|
3
|
+
import { LogArgs } from "../../../options/logOptions.js";
|
|
3
4
|
import { AccountValidatorArgs } from "../options.js";
|
|
4
|
-
import { LogArgs } from "../../../util/index.js";
|
|
5
5
|
import { ISlashingProtectionArgs } from "./options.js";
|
|
6
6
|
type ImportArgs = {
|
|
7
7
|
file: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { getNodeLogger } from "@lodestar/logger/node";
|
|
4
|
+
import { parseLoggerArgs } from "../../../util/logger.js";
|
|
4
5
|
import { getBeaconConfigFromArgs } from "../../../config/index.js";
|
|
5
6
|
import { getValidatorPaths } from "../paths.js";
|
|
6
7
|
import { getGenesisValidatorsRoot, getSlashingProtection } from "./utils.js";
|
|
@@ -25,16 +26,16 @@ export const importCmd = {
|
|
|
25
26
|
const { config, network } = getBeaconConfigFromArgs(args);
|
|
26
27
|
const validatorPaths = getValidatorPaths(args, network);
|
|
27
28
|
// slashingProtection commands are fast so do not require logFile feature
|
|
28
|
-
const
|
|
29
|
+
const logger = getNodeLogger(parseLoggerArgs(args, { defaultLogFilepath: path.join(validatorPaths.dataDir, "validator.log") }, config));
|
|
29
30
|
const { validatorsDbDir: dbPath } = getValidatorPaths(args, network);
|
|
30
|
-
logger.info("Importing
|
|
31
|
+
logger.info("Importing slashing protection data", { dbPath });
|
|
31
32
|
const { slashingProtection, metadata } = getSlashingProtection(args, network, logger);
|
|
32
33
|
// Fetch genesisValidatorsRoot from:
|
|
33
34
|
// - existing cached in validator DB
|
|
34
35
|
// - known genesis data from existing network
|
|
35
36
|
// - else fetch from beacon node
|
|
36
37
|
const genesisValidatorsRoot = (_a = (await metadata.getGenesisValidatorsRoot())) !== null && _a !== void 0 ? _a : (await getGenesisValidatorsRoot(args));
|
|
37
|
-
logger.verbose("Reading
|
|
38
|
+
logger.verbose("Reading slashing protection data", { file: args.file });
|
|
38
39
|
const interchangeStr = await fs.promises.readFile(args.file, "utf8");
|
|
39
40
|
const interchangeJson = JSON.parse(interchangeStr);
|
|
40
41
|
await slashingProtection.importInterchange(interchangeJson, genesisValidatorsRoot, logger);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmds/validator/slashingProtection/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/cmds/validator/slashingProtection/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,wBAAwB,EAAE,qBAAqB,EAAC,MAAM,YAAY,CAAC;AAO3E,MAAM,CAAC,MAAM,SAAS,GACpB;IACE,OAAO,EAAE,QAAQ;IAEjB,QAAQ,EAAE,6BAA6B;IAEvC,QAAQ,EAAE;QACR;YACE,OAAO,EAAE,+EAA+E;YACxF,WAAW,EAAE,0DAA0D;SACxE;KACF;IAED,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,WAAW,EAAE,6DAA6D;YAC1E,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,QAAQ;SACf;KACF;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;;QACtB,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,yEAAyE;QACzE,MAAM,MAAM,GAAG,aAAa,CAC1B,eAAe,CAAC,IAAI,EAAE,EAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,EAAC,EAAE,MAAM,CAAC,CACxG,CAAC;QAEF,MAAM,EAAC,eAAe,EAAE,MAAM,EAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnE,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;QAE5D,MAAM,EAAC,kBAAkB,EAAE,QAAQ,EAAC,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpF,oCAAoC;QACpC,oCAAoC;QACpC,6CAA6C;QAC7C,gCAAgC;QAChC,MAAM,qBAAqB,GACzB,MAAA,CAAC,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC,mCAAI,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;QAElE,MAAM,kBAAkB,CAAC,iBAAiB,CAAC,eAAe,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
|
|
@@ -25,7 +25,7 @@ If no `pubkeys` are provided, it will exit all validators that have been importe
|
|
|
25
25
|
type: "number",
|
|
26
26
|
},
|
|
27
27
|
pubkeys: {
|
|
28
|
-
description: "Pubkeys to exit, must be available as local signers
|
|
28
|
+
description: "Pubkeys to exit, must be available as local signers",
|
|
29
29
|
type: "array",
|
|
30
30
|
string: true,
|
|
31
31
|
coerce: (pubkeys) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voluntaryExit.js","sourceRoot":"","sources":["../../../src/cmds/validator/voluntaryExit.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,GAAG,EAAS,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAsB,UAAU,EAAC,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAM,QAAQ,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EAAC,cAAc,EAAc,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAC,uBAAuB,EAAC,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAUtD,MAAM,CAAC,MAAM,aAAa,GAAkE;IAC1F,OAAO,EAAE,gBAAgB;IAEzB,QAAQ,EACN;mFAC+E;IAEjF,QAAQ,EAAE;QACR;YACE,OAAO,EAAE,0CAA0C;YACnD,WAAW,EAAE,uEAAuE;SACrF;KACF;IAED,OAAO,EAAE;QACP,SAAS,EAAE;YACT,WAAW,EACT,mHAAmH;YACrH,IAAI,EAAE,QAAQ;SACf;QAED,OAAO,EAAE;YACP,WAAW,
|
|
1
|
+
{"version":3,"file":"voluntaryExit.js","sourceRoot":"","sources":["../../../src/cmds/validator/voluntaryExit.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export declare const beaconNodeOptions: {
|
|
|
24
24
|
bootnodes: import("yargs").Options;
|
|
25
25
|
targetPeers: import("yargs").Options;
|
|
26
26
|
subscribeAllSubnets: import("yargs").Options;
|
|
27
|
+
disablePeerScoring: import("yargs").Options;
|
|
27
28
|
mdns: import("yargs").Options;
|
|
28
29
|
"network.maxPeers": import("yargs").Options;
|
|
29
30
|
"network.connectToDiscv5Bootnodes": import("yargs").Options;
|
|
@@ -3,7 +3,7 @@ import { YargsError } from "../../util/index.js";
|
|
|
3
3
|
const defaultListenAddress = "0.0.0.0";
|
|
4
4
|
export const defaultP2pPort = 9000;
|
|
5
5
|
export function parseArgs(args) {
|
|
6
|
-
var _a, _b, _c, _d, _e
|
|
6
|
+
var _a, _b, _c, _d, _e;
|
|
7
7
|
const listenAddress = args.listenAddress || defaultListenAddress;
|
|
8
8
|
const udpPort = (_b = (_a = args.discoveryPort) !== null && _a !== void 0 ? _a : args.port) !== null && _b !== void 0 ? _b : defaultP2pPort;
|
|
9
9
|
const tcpPort = (_c = args.port) !== null && _c !== void 0 ? _c : defaultP2pPort;
|
|
@@ -14,10 +14,10 @@ export function parseArgs(args) {
|
|
|
14
14
|
}
|
|
15
15
|
return {
|
|
16
16
|
discv5: {
|
|
17
|
-
|
|
17
|
+
config: {},
|
|
18
18
|
bindAddr: `/ip4/${listenAddress}/udp/${udpPort}`,
|
|
19
19
|
// TODO: Okay to set to empty array?
|
|
20
|
-
bootEnrs: (
|
|
20
|
+
bootEnrs: (_e = args["bootnodes"]) !== null && _e !== void 0 ? _e : [],
|
|
21
21
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
|
|
22
22
|
enr: undefined,
|
|
23
23
|
},
|
|
@@ -25,6 +25,7 @@ export function parseArgs(args) {
|
|
|
25
25
|
targetPeers,
|
|
26
26
|
localMultiaddrs: [`/ip4/${listenAddress}/tcp/${tcpPort}`],
|
|
27
27
|
subscribeAllSubnets: args["subscribeAllSubnets"],
|
|
28
|
+
disablePeerScoring: args["disablePeerScoring"],
|
|
28
29
|
connectToDiscv5Bootnodes: args["network.connectToDiscv5Bootnodes"],
|
|
29
30
|
discv5FirstQueryDelayMs: args["network.discv5FirstQueryDelayMs"],
|
|
30
31
|
dontSendGossipAttestationsToForkchoice: args["network.dontSendGossipAttestationsToForkchoice"],
|
|
@@ -87,6 +88,12 @@ export const options = {
|
|
|
87
88
|
defaultDescription: String(defaultOptions.network.subscribeAllSubnets === true),
|
|
88
89
|
group: "network",
|
|
89
90
|
},
|
|
91
|
+
disablePeerScoring: {
|
|
92
|
+
type: "boolean",
|
|
93
|
+
description: "Disable peer scoring, used for testing on devnets",
|
|
94
|
+
defaultDescription: String(defaultOptions.network.disablePeerScoring === true),
|
|
95
|
+
group: "network",
|
|
96
|
+
},
|
|
90
97
|
mdns: {
|
|
91
98
|
type: "boolean",
|
|
92
99
|
description: "Enable mdns local peer discovery",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAoB,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAElE,MAAM,oBAAoB,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import { LogLevel } from "@lodestar/logger";
|
|
1
2
|
import { CliCommandOptions } from "../util/command.js";
|
|
2
|
-
|
|
3
|
+
export type LogArgs = {
|
|
4
|
+
logLevel: LogLevel;
|
|
5
|
+
logFile?: string;
|
|
6
|
+
logFileLevel: LogLevel;
|
|
7
|
+
logFileDailyRotate: number;
|
|
8
|
+
logFormatGenesisTime?: number;
|
|
9
|
+
logPrefix?: string;
|
|
10
|
+
logFormat?: string;
|
|
11
|
+
logLevelModule?: string[];
|
|
12
|
+
};
|
|
3
13
|
export declare const logOptions: CliCommandOptions<LogArgs>;
|
|
4
14
|
//# sourceMappingURL=logOptions.d.ts.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LogLevels } from "@lodestar/utils";
|
|
2
|
+
import { LogLevel, logFormats } from "@lodestar/logger";
|
|
3
|
+
import { LOG_FILE_DISABLE_KEYWORD } from "../util/logger.js";
|
|
3
4
|
export const logOptions = {
|
|
4
5
|
logLevel: {
|
|
5
6
|
choices: LogLevels,
|
|
6
7
|
description: "Logging verbosity level for emittings logs to terminal",
|
|
7
|
-
default:
|
|
8
|
+
default: LogLevel.info,
|
|
8
9
|
type: "string",
|
|
9
10
|
},
|
|
10
11
|
logFile: {
|
|
@@ -14,12 +15,12 @@ export const logOptions = {
|
|
|
14
15
|
logFileLevel: {
|
|
15
16
|
choices: LogLevels,
|
|
16
17
|
description: "Logging verbosity level for emittings logs to file",
|
|
17
|
-
default:
|
|
18
|
+
default: LogLevel.debug,
|
|
18
19
|
type: "string",
|
|
19
20
|
},
|
|
20
21
|
logFileDailyRotate: {
|
|
21
22
|
description: "Daily rotate log files, set to an integer to limit the file count, set to 0(zero) to disable rotation",
|
|
22
|
-
default:
|
|
23
|
+
default: 5,
|
|
23
24
|
type: "number",
|
|
24
25
|
},
|
|
25
26
|
logFormatGenesisTime: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logOptions.js","sourceRoot":"","sources":["../../src/options/logOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"logOptions.js","sourceRoot":"","sources":["../../src/options/logOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAC,wBAAwB,EAAC,MAAM,mBAAmB,CAAC;AAa3D,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD,QAAQ,EAAE;QACR,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,wDAAwD;QACrE,OAAO,EAAE,QAAQ,CAAC,IAAI;QACtB,IAAI,EAAE,QAAQ;KACf;IAED,OAAO,EAAE;QACP,WAAW,EAAE,0DAA0D,wBAAwB,cAAc;QAC7G,IAAI,EAAE,QAAQ;KACf;IAED,YAAY,EAAE;QACZ,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,QAAQ,CAAC,KAAK;QACvB,IAAI,EAAE,QAAQ;KACf;IAED,kBAAkB,EAAE;QAClB,WAAW,EACT,uGAAuG;QACzG,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,QAAQ;KACf;IAED,oBAAoB,EAAE;QACpB,MAAM,EAAE,IAAI;QACZ,WAAW,EACT,kHAAkH;QACpH,IAAI,EAAE,QAAQ;KACf;IAED,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,QAAQ;KACf;IAED,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,kEAAkE;QAC/E,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,QAAQ;KACf;IAED,cAAc,EAAE;QACd,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2FAA2F;QACxG,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACxE;CACF,CAAC"}
|
package/lib/util/logger.d.ts
CHANGED
|
@@ -1,39 +1,23 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import { LoggerNodeOpts } from "@lodestar/logger/node";
|
|
3
|
+
import { LogArgs } from "../options/logOptions.js";
|
|
3
4
|
import { GlobalArgs } from "../options/globalOptions.js";
|
|
4
5
|
export declare const LOG_FILE_DISABLE_KEYWORD = "none";
|
|
5
|
-
export declare const LOG_LEVEL_DEFAULT = LogLevel.info;
|
|
6
|
-
export declare const LOG_FILE_LEVEL_DEFAULT = LogLevel.debug;
|
|
7
|
-
export declare const LOG_DAILY_ROTATE_DEFAULT = 5;
|
|
8
|
-
export type LogArgs = {
|
|
9
|
-
logLevel?: LogLevel;
|
|
10
|
-
logFile?: string;
|
|
11
|
-
logFileLevel?: LogLevel;
|
|
12
|
-
logFileDailyRotate?: number;
|
|
13
|
-
logFormatGenesisTime?: number;
|
|
14
|
-
logPrefix?: string;
|
|
15
|
-
logFormat?: string;
|
|
16
|
-
logLevelModule?: string[];
|
|
17
|
-
};
|
|
18
6
|
/**
|
|
19
7
|
* Setup a CLI logger, common for beacon, validator and dev commands
|
|
20
8
|
*/
|
|
21
|
-
export declare function
|
|
9
|
+
export declare function parseLoggerArgs(args: LogArgs & Pick<GlobalArgs, "dataDir">, paths: {
|
|
22
10
|
defaultLogFilepath: string;
|
|
23
11
|
}, config: ChainForkConfig, opts?: {
|
|
24
12
|
hideTimestamp?: boolean;
|
|
25
|
-
}):
|
|
26
|
-
logger: Logger;
|
|
27
|
-
logParams: {
|
|
28
|
-
filename: string;
|
|
29
|
-
rotateMaxFiles: number;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
13
|
+
}): LoggerNodeOpts;
|
|
32
14
|
/**
|
|
33
15
|
* Winston is not able to clean old log files if server is offline for a while
|
|
34
16
|
* so we have to do this manually when starting the node.
|
|
35
17
|
* See https://github.com/ChainSafe/lodestar/issues/4419
|
|
36
18
|
*/
|
|
37
|
-
export declare function cleanOldLogFiles(
|
|
19
|
+
export declare function cleanOldLogFiles(args: LogArgs, paths: {
|
|
20
|
+
defaultLogFilepath: string;
|
|
21
|
+
}): void;
|
|
38
22
|
export declare function shouldDeleteLogFile(prefix: string, extension: string, logFileName: string, maxFiles: number): boolean;
|
|
39
23
|
//# sourceMappingURL=logger.d.ts.map
|
package/lib/util/logger.js
CHANGED
|
@@ -1,91 +1,70 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
-
import DailyRotateFile from "winston-daily-rotate-file";
|
|
4
|
-
import winston from "winston";
|
|
5
3
|
import { SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { TimestampFormatCode, logFormats } from "@lodestar/logger";
|
|
5
|
+
import { LogLevel } from "@lodestar/utils";
|
|
8
6
|
export const LOG_FILE_DISABLE_KEYWORD = "none";
|
|
9
|
-
export const LOG_LEVEL_DEFAULT = LogLevel.info;
|
|
10
|
-
export const LOG_FILE_LEVEL_DEFAULT = LogLevel.debug;
|
|
11
|
-
export const LOG_DAILY_ROTATE_DEFAULT = 5;
|
|
12
|
-
const DATE_PATTERN = "YYYY-MM-DD";
|
|
13
7
|
/**
|
|
14
8
|
* Setup a CLI logger, common for beacon, validator and dev commands
|
|
15
9
|
*/
|
|
16
|
-
export function
|
|
17
|
-
var _a
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
10
|
+
export function parseLoggerArgs(args, paths, config, opts) {
|
|
11
|
+
var _a;
|
|
12
|
+
return {
|
|
13
|
+
level: parseLogLevel(args.logLevel),
|
|
14
|
+
file: args.logFile === LOG_FILE_DISABLE_KEYWORD
|
|
15
|
+
? undefined
|
|
16
|
+
: {
|
|
17
|
+
filepath: (_a = args.logFile) !== null && _a !== void 0 ? _a : paths.defaultLogFilepath,
|
|
18
|
+
level: parseLogLevel(args.logFileLevel),
|
|
19
|
+
dailyRotate: args.logFileDailyRotate,
|
|
20
|
+
},
|
|
21
|
+
module: args.logPrefix,
|
|
22
|
+
format: args.logFormat ? parseLogFormat(args.logFormat) : undefined,
|
|
23
|
+
levelModule: args.logLevelModule && parseLogLevelModule(args.logLevelModule),
|
|
24
|
+
timestampFormat: (opts === null || opts === void 0 ? void 0 : opts.hideTimestamp)
|
|
25
|
+
? { format: TimestampFormatCode.Hidden }
|
|
26
|
+
: args.logFormatGenesisTime !== undefined
|
|
27
|
+
? {
|
|
28
|
+
format: TimestampFormatCode.EpochSlot,
|
|
29
|
+
genesisTime: args.logFormatGenesisTime,
|
|
30
|
+
secondsPerSlot: config.SECONDS_PER_SLOT,
|
|
31
|
+
slotsPerEpoch: SLOTS_PER_EPOCH,
|
|
32
|
+
}
|
|
33
|
+
: {
|
|
34
|
+
format: TimestampFormatCode.DateRegular,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function parseLogFormat(format) {
|
|
39
|
+
if (!logFormats.includes(format)) {
|
|
40
|
+
throw Error(`Unknown log format ${format}`);
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
// }
|
|
40
|
-
// `lodestar --logFileDailyRotate` -> enabled daily rotate with default value
|
|
41
|
-
// `lodestar --logFileDailyRotate 10` -> set daily rotate to custom value 10
|
|
42
|
-
// `lodestar --logFileDailyRotate 0` -> disable daily rotate and accumulate in same file
|
|
43
|
-
const rotateMaxFiles = (_c = args.logFileDailyRotate) !== null && _c !== void 0 ? _c : LOG_DAILY_ROTATE_DEFAULT;
|
|
44
|
-
const filename = (_d = args.logFile) !== null && _d !== void 0 ? _d : paths.defaultLogFilepath;
|
|
45
|
-
if (args.logFile !== LOG_FILE_DISABLE_KEYWORD) {
|
|
46
|
-
const logFileLevel = (_e = args.logFileLevel) !== null && _e !== void 0 ? _e : LOG_FILE_LEVEL_DEFAULT;
|
|
47
|
-
transports.push(rotateMaxFiles > 0
|
|
48
|
-
? new DailyRotateFile({
|
|
49
|
-
level: logFileLevel,
|
|
50
|
-
//insert the date pattern in filename before the file extension.
|
|
51
|
-
filename: filename.replace(/\.(?=[^.]*$)|$/, "-%DATE%$&"),
|
|
52
|
-
datePattern: DATE_PATTERN,
|
|
53
|
-
handleExceptions: true,
|
|
54
|
-
maxFiles: rotateMaxFiles,
|
|
55
|
-
auditFile: path.join(path.dirname(filename), ".log_rotate_audit.json"),
|
|
56
|
-
})
|
|
57
|
-
: new winston.transports.File({
|
|
58
|
-
level: logFileLevel,
|
|
59
|
-
filename: filename,
|
|
60
|
-
handleExceptions: true,
|
|
61
|
-
}));
|
|
42
|
+
return format;
|
|
43
|
+
}
|
|
44
|
+
function parseLogLevel(level) {
|
|
45
|
+
if (LogLevel[level] === undefined) {
|
|
46
|
+
throw Error(`Unknown log level '${level}'`);
|
|
62
47
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
const logger = createWinstonLogger({
|
|
74
|
-
module: args.logPrefix,
|
|
75
|
-
format: args.logFormat ? parseLogFormat(args.logFormat) : "human",
|
|
76
|
-
timestampFormat,
|
|
77
|
-
hideTimestamp: opts === null || opts === void 0 ? void 0 : opts.hideTimestamp,
|
|
78
|
-
}, transports);
|
|
79
|
-
return { logger, logParams: { filename, rotateMaxFiles } };
|
|
48
|
+
return level;
|
|
49
|
+
}
|
|
50
|
+
function parseLogLevelModule(logLevelModuleArr) {
|
|
51
|
+
const levelModule = {};
|
|
52
|
+
for (const logLevelModule of logLevelModuleArr) {
|
|
53
|
+
const [module, levelStr] = logLevelModule.split("=");
|
|
54
|
+
levelModule[module] = parseLogLevel(levelStr);
|
|
55
|
+
}
|
|
56
|
+
return levelModule;
|
|
80
57
|
}
|
|
81
58
|
/**
|
|
82
59
|
* Winston is not able to clean old log files if server is offline for a while
|
|
83
60
|
* so we have to do this manually when starting the node.
|
|
84
61
|
* See https://github.com/ChainSafe/lodestar/issues/4419
|
|
85
62
|
*/
|
|
86
|
-
export function cleanOldLogFiles(
|
|
87
|
-
|
|
88
|
-
const
|
|
63
|
+
export function cleanOldLogFiles(args, paths) {
|
|
64
|
+
var _a;
|
|
65
|
+
const filepath = (_a = args.logFile) !== null && _a !== void 0 ? _a : paths.defaultLogFilepath;
|
|
66
|
+
const folder = path.dirname(filepath);
|
|
67
|
+
const filename = path.basename(filepath);
|
|
89
68
|
const lastIndexDot = filename.lastIndexOf(".");
|
|
90
69
|
const prefix = filename.substring(0, lastIndexDot);
|
|
91
70
|
const extension = filename.substring(lastIndexDot + 1, filename.length);
|
|
@@ -93,7 +72,7 @@ export function cleanOldLogFiles(filePath, maxFiles) {
|
|
|
93
72
|
.readdirSync(folder, { withFileTypes: true })
|
|
94
73
|
.filter((de) => de.isFile())
|
|
95
74
|
.map((de) => de.name)
|
|
96
|
-
.filter((logFileName) => shouldDeleteLogFile(prefix, extension, logFileName,
|
|
75
|
+
.filter((logFileName) => shouldDeleteLogFile(prefix, extension, logFileName, args.logFileDailyRotate))
|
|
97
76
|
.map((logFileName) => path.join(folder, logFileName));
|
|
98
77
|
// delete files
|
|
99
78
|
toDelete.forEach((filename) => fs.unlinkSync(filename));
|
|
@@ -107,10 +86,4 @@ export function shouldDeleteLogFile(prefix, extension, logFileName, maxFiles) {
|
|
|
107
86
|
}
|
|
108
87
|
return false;
|
|
109
88
|
}
|
|
110
|
-
function parseLogFormat(format) {
|
|
111
|
-
if (!logFormats.includes(format)) {
|
|
112
|
-
throw Error(`Invalid log format '${format}'`);
|
|
113
|
-
}
|
|
114
|
-
return format;
|
|
115
|
-
}
|
|
116
89
|
//# sourceMappingURL=logger.js.map
|
package/lib/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainsafe/lodestar",
|
|
3
|
-
"version": "1.9.0-dev.
|
|
3
|
+
"version": "1.9.0-dev.f417c35af0",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "LGPL-3.0",
|
|
@@ -61,16 +61,17 @@
|
|
|
61
61
|
"@chainsafe/discv5": "^3.0.0",
|
|
62
62
|
"@chainsafe/ssz": "^0.10.2",
|
|
63
63
|
"@libp2p/peer-id-factory": "^2.0.3",
|
|
64
|
-
"@lodestar/api": "1.9.0-dev.
|
|
65
|
-
"@lodestar/beacon-node": "1.9.0-dev.
|
|
66
|
-
"@lodestar/config": "1.9.0-dev.
|
|
67
|
-
"@lodestar/db": "1.9.0-dev.
|
|
68
|
-
"@lodestar/light-client": "1.9.0-dev.
|
|
69
|
-
"@lodestar/
|
|
70
|
-
"@lodestar/
|
|
71
|
-
"@lodestar/
|
|
72
|
-
"@lodestar/
|
|
73
|
-
"@lodestar/
|
|
64
|
+
"@lodestar/api": "1.9.0-dev.f417c35af0",
|
|
65
|
+
"@lodestar/beacon-node": "1.9.0-dev.f417c35af0",
|
|
66
|
+
"@lodestar/config": "1.9.0-dev.f417c35af0",
|
|
67
|
+
"@lodestar/db": "1.9.0-dev.f417c35af0",
|
|
68
|
+
"@lodestar/light-client": "1.9.0-dev.f417c35af0",
|
|
69
|
+
"@lodestar/logger": "1.9.0-dev.f417c35af0",
|
|
70
|
+
"@lodestar/params": "1.9.0-dev.f417c35af0",
|
|
71
|
+
"@lodestar/state-transition": "1.9.0-dev.f417c35af0",
|
|
72
|
+
"@lodestar/types": "1.9.0-dev.f417c35af0",
|
|
73
|
+
"@lodestar/utils": "1.9.0-dev.f417c35af0",
|
|
74
|
+
"@lodestar/validator": "1.9.0-dev.f417c35af0",
|
|
74
75
|
"@multiformats/multiaddr": "^11.0.0",
|
|
75
76
|
"@types/lockfile": "^1.0.2",
|
|
76
77
|
"bip39": "^3.1.0",
|
|
@@ -100,5 +101,5 @@
|
|
|
100
101
|
"@types/lodash": "^4.14.192",
|
|
101
102
|
"@types/yargs": "^17.0.24"
|
|
102
103
|
},
|
|
103
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "4f5cd663f9937169b6b6ffa94d3dea81c5da9295"
|
|
104
105
|
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import winston from "winston";
|
|
3
|
-
import { LEVEL } from "triple-beam";
|
|
4
|
-
import { LogLevel } from "@lodestar/utils";
|
|
5
|
-
interface DefaultMeta {
|
|
6
|
-
module: string;
|
|
7
|
-
}
|
|
8
|
-
interface LogInfo extends DefaultMeta {
|
|
9
|
-
[LEVEL]: LogLevel;
|
|
10
|
-
}
|
|
11
|
-
export declare class ConsoleDynamicLevel extends winston.transports.Console {
|
|
12
|
-
private readonly levelByModule;
|
|
13
|
-
private readonly defaultLevel;
|
|
14
|
-
private readonly levels;
|
|
15
|
-
private parent?;
|
|
16
|
-
constructor(opts: {
|
|
17
|
-
defaultLevel: LogLevel;
|
|
18
|
-
} & winston.transports.ConsoleTransportOptions);
|
|
19
|
-
setModuleLevel(module: string, level: LogLevel): void;
|
|
20
|
-
deleteModuleLevel(module: string): boolean;
|
|
21
|
-
_write(info: LogInfo, enc: BufferEncoding, callback: (error?: Error | null | undefined) => void): void;
|
|
22
|
-
}
|
|
23
|
-
export {};
|
|
24
|
-
//# sourceMappingURL=loggerConsoleTransport.d.ts.map
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import winston from "winston";
|
|
2
|
-
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
3
|
-
import { LEVEL } from "triple-beam";
|
|
4
|
-
export class ConsoleDynamicLevel extends winston.transports.Console {
|
|
5
|
-
constructor(opts) {
|
|
6
|
-
super(opts);
|
|
7
|
-
this.levelByModule = new Map();
|
|
8
|
-
this.defaultLevel = opts.defaultLevel;
|
|
9
|
-
// Set level and parent to undefined so that underlying transport logs everything
|
|
10
|
-
this.level = undefined;
|
|
11
|
-
}
|
|
12
|
-
setModuleLevel(module, level) {
|
|
13
|
-
this.levelByModule.set(module, level);
|
|
14
|
-
}
|
|
15
|
-
deleteModuleLevel(module) {
|
|
16
|
-
return this.levelByModule.delete(module);
|
|
17
|
-
}
|
|
18
|
-
_write(info, enc, callback) {
|
|
19
|
-
var _a;
|
|
20
|
-
const moduleLevel = (_a = this.levelByModule.get(info.module)) !== null && _a !== void 0 ? _a : this.defaultLevel;
|
|
21
|
-
// Min number is highest prio log level
|
|
22
|
-
// levels = {error: 0, warn: 1, info: 2, ...}
|
|
23
|
-
if (this.levels[moduleLevel] >= this.levels[info[LEVEL]]) {
|
|
24
|
-
// Set level and parent to undefined so that underlying transport logs everything
|
|
25
|
-
if (this.parent) {
|
|
26
|
-
this.parent = undefined;
|
|
27
|
-
}
|
|
28
|
-
super._write(info, enc, callback);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
callback(null);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=loggerConsoleTransport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loggerConsoleTransport.js","sourceRoot":"","sources":["../../src/util/loggerConsoleTransport.ts"],"names":[],"mappings":"AAAA,OAAO,OAAiB,MAAM,SAAS,CAAC;AACxC,6DAA6D;AAC7D,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAWlC,MAAM,OAAO,mBAAoB,SAAQ,OAAO,CAAC,UAAU,CAAC,OAAO;IAQjE,YAAY,IAA2E;QACrF,KAAK,CAAC,IAAI,CAAC,CAAC;QARG,kBAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;QAU3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,iFAAiF;QACjF,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,KAAe;QAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,IAAa,EAAE,GAAmB,EAAE,QAAoD;;QAC7F,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAE,IAAgB,CAAC,MAAM,CAAC,mCAAI,IAAI,CAAC,YAAY,CAAC;QAE1F,uCAAuC;QACvC,6CAA6C;QAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACxD,iFAAiF;YACjF,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;aACzB;YAED,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SACnC;aAAM;YACL,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChB;IACH,CAAC;CACF"}
|