Skip to content

Commit

Permalink
feat: Update layout json data output
Browse files Browse the repository at this point in the history
  • Loading branch information
Romain Lenzotti committed May 18, 2020
1 parent 24a285c commit d0c905e
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 24 deletions.
27 changes: 17 additions & 10 deletions packages/logger/src/layouts/components/JsonLayout.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,31 @@
import * as Util from "util";
import {BaseLayout} from "../class/BaseLayout";
import {LogEvent} from "../../core/LogEvent";
import {Layout} from "../decorators/layout";
import * as Util from "util";
import {removeColors} from "../utils/colorizeUtils";

/**
*
* @private
*/
@Layout({name: "json"})
export class JsonLayout extends BaseLayout {
transform(loggingEvent: LogEvent, timezoneOffset?: number): string {
const log = {
const log: any = {
startTime: loggingEvent.startTime,
categoryName: loggingEvent.categoryName,
level: loggingEvent.level.toString(),
data: loggingEvent.data,
context: loggingEvent.context
level: loggingEvent.level.toString()
};

log.data = log.data.map(data => (Util.format as any)(...[].concat(data as any)));
log.data = loggingEvent.data.reduce((data, current) => {
if (typeof current === "object") {
Object.assign(log, current);

if (current.data) {
return [].concat(data, current.data);
}

return data;
}

return [...data, removeColors(Util.format(current))];
}, []);

return JSON.stringify(log) + (this.config["separator"] || "");
}
Expand Down
4 changes: 4 additions & 0 deletions packages/logger/src/layouts/utils/colorizeUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@ export function colorizeEnd(style: any) {
export function colorize(str: string, style: any) {
return colorizeStart(style) + str + colorizeEnd(style);
}

export function removeColors(str: string) {
return str.replace(/\[\d+m|\\u\d+b/gi, "");
}
50 changes: 37 additions & 13 deletions packages/logger/test/layouts/components/JsonLayout.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,60 @@ import {JsonLayout} from "../../../src/layouts/components/JsonLayout";
import {expect} from "chai";

describe("JsonLayout", () => {
describe("when seperator is given", () => {
let logEvent: any, layout: any, result: any;
before(() => {
layout = new JsonLayout({
describe("when separator is given", () => {
it("should return a formatted string", () => {
const layout = new JsonLayout({
type: "json",
separator: ","
});

const context = new Map();
context.set("user", "romain");
logEvent = new LogEvent("category", levels().DEBUG, ["data"], context);
const logEvent = new LogEvent("category", levels().DEBUG, ["data"], context);
// @ts-ignore
logEvent._startTime = new Date("2017-06-18 22:29:38.234");
result = layout.transform(logEvent);
const result = layout.transform(logEvent);

// @ts-ignore
expect(result).to.eq(
JSON.stringify({
startTime: logEvent.startTime,
categoryName: "category",
level: "DEBUG",
data: ["data"]
}) + ","
);
});
it("should return a formatted object", () => {
const layout = new JsonLayout({
type: "json",
separator: ","
});

it("should return a formated string", () => {
const context = new Map();
context.set("user", "romain");
const logEvent = new LogEvent("category", levels().DEBUG, [{
test: "test",
data: ["hello"]
}], context);
// @ts-ignore
logEvent._startTime = new Date("2017-06-18 22:29:38.234");
const result = layout.transform(logEvent);

// @ts-ignore
expect(result).to.eq(
JSON.stringify({
startTime: logEvent._startTime,
startTime: logEvent.startTime,
categoryName: "category",
level: "DEBUG",
data: ["data"],
context: {}
test: "test",
data: ["hello"]
}) + ","
);
});
});

describe("when seperator isn't given", () => {
describe("when separator isn't given", () => {
let logEvent: any, layout: any, result: any;
before(() => {
layout = new JsonLayout({
Expand All @@ -52,8 +77,7 @@ describe("JsonLayout", () => {
startTime: logEvent._startTime,
categoryName: "category",
level: "DEBUG",
data: ["data"],
context: {}
data: ["data"]
})
);
});
Expand Down
13 changes: 12 additions & 1 deletion packages/logger/test/logger/class/Logger.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -351,10 +351,21 @@ describe("Logger", () => {
});
});

describe("shutdown()", () => {
it("should stop logger", async () => {
logger = new Logger();
logger.name = "loggerName";
logger.start();
logger.appenders.set("custom", {type: "test", layout: {type: "test"}});

await logger.shutdown();
});
});

describe("when appender doesn't exists", () => {
it("should throw an error", () => {
// @ts-ignore
assert.throws(() => logger.appenders.push({type: "unknow"}), "");
assert.throws(() => logger.appenders.push({type: "unknown"}), "");
});
});
});

0 comments on commit d0c905e

Please sign in to comment.