Skip to content

Commit 8d10df0

Browse files
authored
feat(rpc): SetLogLevel (#1955)
This adds a new rpc call to change the logging level of a running xud instance. Closes #835.
1 parent 3a0104b commit 8d10df0

File tree

14 files changed

+1008
-270
lines changed

14 files changed

+1008
-270
lines changed

docs/api.md

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/Logger.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ const LevelPriorities = {
2323
trace: 6,
2424
};
2525

26+
enum LevelPriority {
27+
alert,
28+
error,
29+
warn,
30+
info,
31+
verbose,
32+
debug,
33+
trace,
34+
}
35+
2636
export enum Context {
2737
Global = 'GLOBAL',
2838
DB = 'DB',
@@ -138,6 +148,12 @@ class Logger {
138148
});
139149
}
140150

151+
public setLogLevel = (level: Level) => {
152+
this.logger?.transports.forEach((transport) => {
153+
transport.level = level;
154+
});
155+
}
156+
141157
private getLogFormat = (colorize: boolean, dateFormat?: string) => {
142158
const { format } = winston;
143159

@@ -219,4 +235,4 @@ class Logger {
219235
}
220236

221237
export default Logger;
222-
export { Level, Loggers };
238+
export { Level, Loggers, LevelPriority };

lib/Xud.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,13 @@ class Xud extends EventEmitter {
213213
shutdown: this.beginShutdown,
214214
});
215215

216+
this.service.on('logLevel', (level) => {
217+
this.swapClientManager?.setLogLevel(level);
218+
Object.values(loggers).forEach((logger) => {
219+
logger.setLogLevel(level);
220+
});
221+
});
222+
216223
if (this.swapClientManager.connextClient?.isOperational()) {
217224
this.httpServer = new HttpServer(loggers.http, this.service);
218225
await this.httpServer.listen(

lib/cli/commands/loglevel.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Arguments, Argv } from 'yargs';
2+
import { LogLevel, SetLogLevelRequest } from '../../proto/xudrpc_pb';
3+
import { callback, loadXudClient } from '../command';
4+
import { LevelPriority } from '../../Logger';
5+
6+
export const command = 'loglevel <level>';
7+
8+
export const describe = 'set the logging level for xud';
9+
10+
export const builder = (argv: Argv) => argv
11+
.positional('level', {
12+
description: 'the logging level',
13+
type: 'string',
14+
choices: ['alert', 'error', 'warn', 'verbose', 'info', 'debug', 'trace'],
15+
coerce: (logLevelStr: string) => {
16+
const logLevelLower = logLevelStr.toLowerCase();
17+
return logLevelLower;
18+
},
19+
})
20+
.example('$0 loglevel trace', 'set log level to trace')
21+
.example('$0 loglevel info', 'set log level to info');
22+
23+
export const handler = async (argv: Arguments<any>) => {
24+
const request = new SetLogLevelRequest();
25+
const levelPriority = LevelPriority[argv.level] as unknown as number;
26+
const logLevel: LogLevel = levelPriority as LogLevel;
27+
request.setLogLevel(logLevel);
28+
(await loadXudClient(argv)).setLogLevel(request, callback(argv));
29+
};

lib/grpc/GrpcService.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,20 @@ class GrpcService {
843843
}
844844
}
845845

846+
public setLogLevel: grpc.handleUnaryCall<xudrpc.SetLogLevelRequest, xudrpc.SetLogLevelResponse> = async (call, callback) => {
847+
if (!this.isReady(this.service, callback)) {
848+
return;
849+
}
850+
try {
851+
await this.service.setLogLevel(call.request.toObject());
852+
853+
const response = new xudrpc.SetLogLevelResponse();
854+
callback(null, response);
855+
} catch (err) {
856+
callback(getGrpcError(err), null);
857+
}
858+
}
859+
846860
public shutdown: grpc.handleUnaryCall<xudrpc.ShutdownRequest, xudrpc.ShutdownResponse> = (_, callback) => {
847861
if (!this.isReady(this.service, callback)) {
848862
return;

lib/proto/xudrpc.swagger.json

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/proto/xudrpc_grpc_pb.d.ts

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/proto/xudrpc_grpc_pb.js

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)