Skip to content

Commit a3ff0ba

Browse files
author
Alan Churley
committed
feat(logger): adding basic crude logger module, and support for log levels by passed param/env param
1 parent a10791f commit a3ff0ba

File tree

4 files changed

+93
-10
lines changed

4 files changed

+93
-10
lines changed

packages/logging/src/greeter/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/logging/src/index.ts

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,50 @@
1-
export * from './greeter';
1+
enum LogLevel {
2+
DEBUG = 1,
3+
INFO = 2,
4+
WARNING = 3,
5+
ERROR = 4,
6+
CRITICAL = 5
7+
}
8+
9+
interface LoggerConfig {
10+
LogLevel?: LogLevel;
11+
}
12+
13+
class Logger {
14+
private CURRENT_LOG_LEVEL: LogLevel = LogLevel.INFO;
15+
16+
constructor(config?: LoggerConfig) {
17+
config = config || {};
18+
this.setInitialLogLevel(config);
19+
}
20+
private setInitialLogLevel(config: LoggerConfig) {
21+
22+
if (config.LogLevel) {
23+
this.CURRENT_LOG_LEVEL = config.LogLevel;
24+
return;
25+
}
26+
if (process.env.LOG_LEVEL) {
27+
const environmentVariableLevel = process.env.LOG_LEVEL;
28+
if (environmentVariableLevel in LogLevel) {
29+
this.CURRENT_LOG_LEVEL = LogLevel[environmentVariableLevel as keyof typeof LogLevel];
30+
return;
31+
}
32+
this.Warn(`LOG_LEVEL environment value was not valid,
33+
Received ${environmentVariableLevel} and expected one of ${Object.keys(LogLevel).join(', ')}`);
34+
}
35+
}
36+
getCurrentLogLevel() {
37+
return this.CURRENT_LOG_LEVEL;
38+
}
39+
public Warn(message?: string) {
40+
//ToDo - change once logging has been established
41+
}
42+
}
43+
44+
export {
45+
Logger,
46+
LogLevel
47+
};
48+
49+
50+

packages/logging/tests/unit/Greeter.test.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {Logger, LogLevel} from '../../src';
2+
3+
describe('Logger Class', () => {
4+
test('Should return a valid instance', () => {
5+
const logger = new Logger();
6+
});
7+
describe('Instantiation Log levels', () => {
8+
afterEach(() => {
9+
delete process.env.LOG_LEVEL;
10+
})
11+
test('Should default to INFO if no level passed', () =>{
12+
const logger = new Logger();
13+
expect(logger.getCurrentLogLevel()).toBe(LogLevel.INFO);
14+
})
15+
test('Log level passed in constructor should be maintained', () => {
16+
const loggerDEBUG = new Logger({LogLevel: LogLevel.DEBUG});
17+
expect(loggerDEBUG.getCurrentLogLevel()).toBe(LogLevel.DEBUG);
18+
const loggerWARN = new Logger({LogLevel: LogLevel.WARNING});
19+
expect(loggerWARN.getCurrentLogLevel()).toBe(LogLevel.WARNING);
20+
const loggerCRITICAL = new Logger({LogLevel: 5});
21+
expect(loggerCRITICAL.getCurrentLogLevel()).toBe(LogLevel.CRITICAL);
22+
})
23+
test('Log level passed as ENV var should be set', () => {
24+
process.env.LOG_LEVEL = "ERROR";
25+
const logger = new Logger();
26+
expect(logger.getCurrentLogLevel()).toBe(LogLevel.ERROR);
27+
})
28+
test('Log level passed in constructor should override environment variable', () => {
29+
process.env.LOG_LEVEL = "ERROR";
30+
const logger = new Logger({LogLevel: LogLevel.CRITICAL});
31+
expect(logger.getCurrentLogLevel()).toBe(LogLevel.CRITICAL);
32+
process.env.LOG_LEVEL = "DEBUG";
33+
const loggerDEBUG = new Logger();
34+
expect(loggerDEBUG.getCurrentLogLevel()).toBe(LogLevel.DEBUG);
35+
})
36+
test('Invalid ENV param should throw warning, and set log level to INFO', () => {
37+
process.env.LOG_LEVEL = "ALERT";
38+
const logger = new Logger();
39+
expect(logger.getCurrentLogLevel()).toBe(LogLevel.INFO);
40+
})
41+
})
42+
});
43+

0 commit comments

Comments
 (0)