mirror of https://github.com/grpc/grpc-node.git
grpc-js-core: implement setLogger() and setLogVerbosity()
These were missing from the pure JS implementation. This commit adds them.
This commit is contained in:
parent
28cc8447c8
commit
6573e70ad4
|
@ -17,3 +17,9 @@ export enum Status {
|
||||||
DATA_LOSS,
|
DATA_LOSS,
|
||||||
UNAUTHENTICATED
|
UNAUTHENTICATED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum LogVerbosity {
|
||||||
|
DEBUG = 0,
|
||||||
|
INFO,
|
||||||
|
ERROR
|
||||||
|
}
|
||||||
|
|
|
@ -4,10 +4,11 @@ import {IncomingHttpHeaders} from 'http';
|
||||||
import {CallCredentials} from './call-credentials';
|
import {CallCredentials} from './call-credentials';
|
||||||
import {ChannelCredentials} from './channel-credentials';
|
import {ChannelCredentials} from './channel-credentials';
|
||||||
import {Client} from './client';
|
import {Client} from './client';
|
||||||
import {Status} from './constants';
|
import {LogVerbosity, Status} from './constants';
|
||||||
import {loadPackageDefinition, makeClientConstructor} from './make-client';
|
import {loadPackageDefinition, makeClientConstructor} from './make-client';
|
||||||
import {Metadata} from './metadata';
|
import {Metadata} from './metadata';
|
||||||
import { Channel } from './channel';
|
import { Channel } from './channel';
|
||||||
|
import * as logging from './logging';
|
||||||
|
|
||||||
interface IndexedObject {
|
interface IndexedObject {
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
|
@ -96,6 +97,7 @@ export {Metadata};
|
||||||
/**** Constants ****/
|
/**** Constants ****/
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
LogVerbosity as logVerbosity,
|
||||||
Status as status
|
Status as status
|
||||||
// TODO: Other constants as well
|
// TODO: Other constants as well
|
||||||
};
|
};
|
||||||
|
@ -135,12 +137,12 @@ export const load = (filename: any, format: any, options: any) => {
|
||||||
'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead');
|
'Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead');
|
||||||
};
|
};
|
||||||
|
|
||||||
export const setLogger = (logger: any) => {
|
export const setLogger = (logger: Partial<Console>): void => {
|
||||||
throw new Error('Not yet implemented');
|
logging.setLogger(logger);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const setLogVerbosity = (verbosity: any) => {
|
export const setLogVerbosity = (verbosity: LogVerbosity): void => {
|
||||||
throw new Error('Not yet implemented');
|
logging.setLoggerVerbosity(verbosity);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Server = (options: any) => {
|
export const Server = (options: any) => {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import {LogVerbosity} from './constants';
|
||||||
|
|
||||||
|
let _logger: Partial<Console> = console;
|
||||||
|
let _logVerbosity: LogVerbosity = LogVerbosity.DEBUG;
|
||||||
|
|
||||||
|
export const getLogger = (): Partial<Console> => {
|
||||||
|
return _logger;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setLogger = (logger: Partial<Console>): void => {
|
||||||
|
_logger = logger;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setLoggerVerbosity = (verbosity: LogVerbosity): void => {
|
||||||
|
_logVerbosity = verbosity;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const log = (severity: LogVerbosity, ...args: any[]): void => {
|
||||||
|
if (severity >= _logVerbosity && typeof _logger.error === 'function') {
|
||||||
|
_logger.error(...args);
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,60 @@
|
||||||
|
import * as assert from 'assert';
|
||||||
|
|
||||||
|
import * as grpc from '../src';
|
||||||
|
import * as logging from '../src/logging';
|
||||||
|
|
||||||
|
describe('Logging', () => {
|
||||||
|
afterEach(function() {
|
||||||
|
// Ensure that the logger is restored to its defaults after each test.
|
||||||
|
grpc.setLogger(console);
|
||||||
|
grpc.setLogVerbosity(grpc.logVerbosity.DEBUG);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('logger defaults to console', () => {
|
||||||
|
assert.strictEqual(logging.getLogger(), console);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('sets the logger to a new value', () => {
|
||||||
|
const logger: Partial<Console> = {};
|
||||||
|
|
||||||
|
logging.setLogger(logger);
|
||||||
|
assert.strictEqual(logging.getLogger(), logger);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gates logging based on severity', () => {
|
||||||
|
const output: any[] = [];
|
||||||
|
const logger: Partial<Console> = {
|
||||||
|
error(...args: any[]): void {
|
||||||
|
output.push(args);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
logging.setLogger(logger);
|
||||||
|
|
||||||
|
// The default verbosity (DEBUG) should log everything.
|
||||||
|
logging.log(grpc.logVerbosity.DEBUG, 'a', 'b', 'c');
|
||||||
|
logging.log(grpc.logVerbosity.INFO, 'd', 'e');
|
||||||
|
logging.log(grpc.logVerbosity.ERROR, 'f');
|
||||||
|
|
||||||
|
// The INFO verbosity should not log DEBUG data.
|
||||||
|
logging.setLoggerVerbosity(grpc.logVerbosity.INFO);
|
||||||
|
logging.log(grpc.logVerbosity.DEBUG, 1, 2, 3);
|
||||||
|
logging.log(grpc.logVerbosity.INFO, 'g');
|
||||||
|
logging.log(grpc.logVerbosity.ERROR, 'h', 'i');
|
||||||
|
|
||||||
|
// The ERROR verbosity should not log DEBUG or INFO data.
|
||||||
|
logging.setLoggerVerbosity(grpc.logVerbosity.ERROR);
|
||||||
|
logging.log(grpc.logVerbosity.DEBUG, 4, 5, 6);
|
||||||
|
logging.log(grpc.logVerbosity.INFO, 7, 8);
|
||||||
|
logging.log(grpc.logVerbosity.ERROR, 'j', 'k');
|
||||||
|
|
||||||
|
assert.deepStrictEqual(output, [
|
||||||
|
['a', 'b', 'c'],
|
||||||
|
['d', 'e'],
|
||||||
|
['f'],
|
||||||
|
['g'],
|
||||||
|
['h', 'i'],
|
||||||
|
['j', 'k']
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue