Skip to content

Commit cd98cbc

Browse files
authored
fix: add check if msg and meta properties are deleted and give priority to log.meta in meta object (#14)
1 parent 3eadb2d commit cd98cbc

File tree

2 files changed

+157
-22
lines changed

2 files changed

+157
-22
lines changed

lib/cloud-logging.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ class CloudLogging {
8181
}
8282

8383
const meta = Object.assign(
84-
{ severity: this.mapSeverity(log.level) },
85-
log.meta // Custom property to add more meta to the LogEntry
84+
log.meta, // Custom property to add more meta to the LogEntry
85+
{ severity: this.mapSeverity(log.level) }
8686
)
8787

88-
delete log.meta
88+
if (log.meta) {
89+
delete log.meta
90+
}
8991

9092
meta.resource = Object.assign({}, this._resource, meta.resource)
9193
meta.labels = Object.assign({}, this._defaultLabels, meta.labels)
@@ -96,7 +98,10 @@ class CloudLogging {
9698
}
9799

98100
log.message = log.message ?? log.msg
99-
delete log.msg
101+
102+
if (log.msg) {
103+
delete log.msg
104+
}
100105

101106
this._log.write(this._log.entry(meta, log))
102107
}

test/unit/cloud_logging.test.js

Lines changed: 148 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -255,18 +255,22 @@ tap.test('CloudLogging#sync', root => {
255255
sync: true
256256
}
257257

258-
nested.plan(6)
258+
nested.plan(7)
259259

260260
nested.test('Should parse a line correctly', async t => {
261261
let expectedEntry
262262
const expectedLogEntry = {
263263
some: 'log',
264264
being: 'printed',
265-
message: 'being printed'
265+
message: 'being printed',
266+
meta: {
267+
trace: 'testTrace-123'
268+
}
266269
}
267270
class LogMock extends BaseLogMock {
268271
entry (meta, log) {
269272
const expectedMeta = Object.assign(
273+
expectedLogEntry.meta,
270274
{
271275
severity: CloudLogging.SEVERITY_MAP[30],
272276
labels: {
@@ -277,12 +281,14 @@ tap.test('CloudLogging#sync', root => {
277281
{ resource: Object.assign({ type: 'global' }, detectedResource) }
278282
)
279283

284+
const { meta: _meta, ...expectedLog } = expectedLogEntry
285+
280286
t.same(meta, expectedMeta)
281-
t.same(log, expectedLogEntry)
287+
t.same(log, expectedLog)
282288

283289
return (
284290
(expectedEntry = Object.assign({}, meta, {
285-
jsonPayload: expectedLogEntry,
291+
jsonPayload: expectedLog,
286292
logName: this.name
287293
})),
288294
expectedEntry
@@ -328,11 +334,15 @@ tap.test('CloudLogging#sync', root => {
328334
level: 50,
329335
some: 'log',
330336
being: 'printed',
331-
message: 'being printed'
337+
message: 'being printed',
338+
meta: {
339+
trace: 'testTrace-123'
340+
}
332341
}
333342
class LogMock extends BaseLogMock {
334343
entry (meta, log) {
335344
const expectedMeta = Object.assign(
345+
expectedLogEntry.meta,
336346
{
337347
severity: CloudLogging.SEVERITY_MAP[50],
338348
labels: {
@@ -343,8 +353,10 @@ tap.test('CloudLogging#sync', root => {
343353
{ resource: Object.assign({ type: 'global' }, detectedResource) }
344354
)
345355

356+
const { meta: _meta, ...expectedLog } = expectedLogEntry
357+
346358
t.same(meta, expectedMeta)
347-
t.same(log, expectedLogEntry)
359+
t.same(log, expectedLog)
348360

349361
return (
350362
(expectedEntry = Object.assign({}, meta, {
@@ -388,17 +400,103 @@ tap.test('CloudLogging#sync', root => {
388400
instance.parseLine(JSON.stringify(expectedLogEntry))
389401
})
390402

403+
nested.test('Should delete the msg and meta property', async t => {
404+
let expectedEntry
405+
const logEntry = {
406+
level: 50,
407+
some: 'log',
408+
being: 'printed',
409+
msg: 'being printed',
410+
meta: {
411+
trace: 'testTrace-123',
412+
spanId: 'testSpan-123'
413+
}
414+
}
415+
class LogMock extends BaseLogMock {
416+
entry (meta, log) {
417+
const expectedMeta = Object.assign(
418+
logEntry.meta,
419+
{
420+
severity: CloudLogging.SEVERITY_MAP[50],
421+
labels: {
422+
logger: 'pino',
423+
agent: 'cloud_pine'
424+
}
425+
},
426+
{ resource: Object.assign({ type: 'global' }, detectedResource) }
427+
)
428+
const expectedLogEntry = Object.assign({ message: '' }, logEntry)
429+
430+
expectedLogEntry.message = logEntry.msg
431+
delete expectedLogEntry.msg
432+
433+
const { meta: _meta, ...expectedLog } = expectedLogEntry
434+
435+
delete expectedLogEntry.meta
436+
437+
t.same(meta, expectedMeta)
438+
t.same(log, expectedLog)
439+
440+
return (
441+
(expectedEntry = Object.assign({}, meta, {
442+
jsonPayload: log,
443+
logName: this.name
444+
})),
445+
expectedEntry
446+
)
447+
}
448+
449+
write (entry) {
450+
t.notOk(entry.jsonPayload.msg)
451+
t.notOk(entry.jsonPayload.meta)
452+
t.equal(entry.jsonPayload.message, logEntry.msg)
453+
t.same(entry, expectedEntry)
454+
}
455+
}
456+
457+
class LoggingMock extends BaseLoggingMock {
458+
setProjectId () {
459+
return Promise.resolve()
460+
}
461+
462+
setDetectedResource () {
463+
this.detectedResource = detectedResource
464+
return Promise.resolve()
465+
}
466+
467+
logSync (name) {
468+
return new LogMock(name)
469+
}
470+
}
471+
472+
const { CloudLogging } = t.mock('../../lib/cloud-logging', {
473+
'@google-cloud/logging': { Logging: LoggingMock }
474+
})
475+
476+
t.plan(6)
477+
478+
const instance = new CloudLogging(logName, defaultOptions)
479+
480+
await instance.init()
481+
482+
instance.parseLine(JSON.stringify(logEntry))
483+
})
484+
391485
nested.test('Should handle msg property', async t => {
392486
let expectedEntry
393487
const logEntry = {
394488
level: 50,
395489
some: 'log',
396490
being: 'printed',
397-
msg: 'being printed'
491+
msg: 'being printed',
492+
meta: {
493+
trace: 'testTrace-123'
494+
}
398495
}
399496
class LogMock extends BaseLogMock {
400497
entry (meta, log) {
401498
const expectedMeta = Object.assign(
499+
logEntry.meta,
402500
{
403501
severity: CloudLogging.SEVERITY_MAP[50],
404502
labels: {
@@ -413,8 +511,10 @@ tap.test('CloudLogging#sync', root => {
413511
expectedLogEntry.message = logEntry.msg
414512
delete expectedLogEntry.msg
415513

514+
const { meta: _meta, ...expectedLog } = expectedLogEntry
515+
416516
t.same(meta, expectedMeta)
417-
t.same(log, expectedLogEntry)
517+
t.same(log, expectedLog)
418518

419519
return (
420520
(expectedEntry = Object.assign({}, meta, {
@@ -570,7 +670,10 @@ tap.test('CloudLogging#sync', root => {
570670
const expectedLogEntry = {
571671
some: 'log',
572672
being: 'printed',
573-
message: 'being printed'
673+
message: 'being printed',
674+
meta: {
675+
trace: 'testTrace-123'
676+
}
574677
}
575678
const httpRequestLog = {
576679
requestMethod: 'POST',
@@ -593,6 +696,7 @@ tap.test('CloudLogging#sync', root => {
593696
class LogMock extends BaseLogMock {
594697
entry (meta, log) {
595698
const expectedMeta = Object.assign(
699+
expectedLogEntry.meta,
596700
{
597701
httpRequest: httpRequestLog,
598702
severity: CloudLogging.SEVERITY_MAP[30],
@@ -604,8 +708,10 @@ tap.test('CloudLogging#sync', root => {
604708
{ resource: Object.assign({ type: 'global' }, detectedResource) }
605709
)
606710

711+
const { meta: _meta, ...expectedLog } = expectedLogEntry
712+
607713
t.same(meta, expectedMeta)
608-
t.same(log, expectedLogEntry)
714+
t.same(log, expectedLog)
609715

610716
return (
611717
(expectedEntry = Object.assign({}, meta, {
@@ -942,11 +1048,15 @@ tap.test('CloudLogging#async', root => {
9421048
const expectedLogEntry = {
9431049
some: 'log',
9441050
being: 'printed',
945-
message: 'being printed'
1051+
message: 'being printed',
1052+
meta: {
1053+
trace: 'exampleTrace-123'
1054+
}
9461055
}
9471056
class LogMock extends BaseLogMock {
9481057
entry (meta, log) {
9491058
const expectedMeta = Object.assign(
1059+
expectedLogEntry.meta,
9501060
{
9511061
severity: CloudLogging.SEVERITY_MAP[30],
9521062
labels: {
@@ -957,8 +1067,10 @@ tap.test('CloudLogging#async', root => {
9571067
{ resource: Object.assign({ type: 'global' }, detectedResource) }
9581068
)
9591069

1070+
const { meta: _meta, ...expectedLog } = expectedLogEntry
1071+
9601072
t.same(meta, expectedMeta)
961-
t.same(log, expectedLogEntry)
1073+
t.same(log, expectedLog)
9621074

9631075
return (
9641076
(expectedEntry = Object.assign({}, meta, {
@@ -1008,11 +1120,15 @@ tap.test('CloudLogging#async', root => {
10081120
level: 50,
10091121
some: 'log',
10101122
being: 'printed',
1011-
message: 'being printed'
1123+
message: 'being printed',
1124+
meta: {
1125+
trace: 'testTrace-123'
1126+
}
10121127
}
10131128
class LogMock extends BaseLogMock {
10141129
entry (meta, log) {
10151130
const expectedMeta = Object.assign(
1131+
expectedLogEntry.meta,
10161132
{
10171133
severity: CloudLogging.SEVERITY_MAP[50],
10181134
labels: {
@@ -1023,8 +1139,10 @@ tap.test('CloudLogging#async', root => {
10231139
{ resource: Object.assign({ type: 'global' }, detectedResource) }
10241140
)
10251141

1142+
const { meta: _meta, ...expectedLog } = expectedLogEntry
1143+
10261144
t.same(meta, expectedMeta)
1027-
t.same(log, expectedLogEntry)
1145+
t.same(log, expectedLog)
10281146

10291147
return (
10301148
(expectedEntry = Object.assign({}, meta, {
@@ -1074,11 +1192,15 @@ tap.test('CloudLogging#async', root => {
10741192
level: 50,
10751193
some: 'log',
10761194
being: 'printed',
1077-
msg: 'being printed'
1195+
msg: 'being printed',
1196+
meta: {
1197+
trace: 'testTrace-123'
1198+
}
10781199
}
10791200
class LogMock extends BaseLogMock {
10801201
entry (meta, log) {
10811202
const expectedMeta = Object.assign(
1203+
logEntry.meta,
10821204
{
10831205
severity: CloudLogging.SEVERITY_MAP[50],
10841206
labels: {
@@ -1093,8 +1215,10 @@ tap.test('CloudLogging#async', root => {
10931215
expectedLogEntry.message = logEntry.msg
10941216
delete expectedLogEntry.msg
10951217

1218+
const { meta: _meta, ...expectedLog } = expectedLogEntry
1219+
10961220
t.same(meta, expectedMeta)
1097-
t.same(log, expectedLogEntry)
1221+
t.same(log, expectedLog)
10981222

10991223
return (
11001224
(expectedEntry = Object.assign({}, meta, {
@@ -1250,7 +1374,10 @@ tap.test('CloudLogging#async', root => {
12501374
const expectedLogEntry = {
12511375
some: 'log',
12521376
being: 'printed',
1253-
message: 'being printed'
1377+
message: 'being printed',
1378+
meta: {
1379+
trace: 'testTrace-123'
1380+
}
12541381
}
12551382
const httpRequestLog = {
12561383
requestMethod: 'POST',
@@ -1273,6 +1400,7 @@ tap.test('CloudLogging#async', root => {
12731400
class LogMock extends BaseLogMock {
12741401
entry (meta, log) {
12751402
const expectedMeta = Object.assign(
1403+
expectedLogEntry.meta,
12761404
{
12771405
httpRequest: httpRequestLog,
12781406
severity: CloudLogging.SEVERITY_MAP[30],
@@ -1284,8 +1412,10 @@ tap.test('CloudLogging#async', root => {
12841412
{ resource: Object.assign({ type: 'global' }, detectedResource) }
12851413
)
12861414

1415+
const { meta: _meta, ...expectedLog } = expectedLogEntry
1416+
12871417
t.same(meta, expectedMeta)
1288-
t.same(log, expectedLogEntry)
1418+
t.same(log, expectedLog)
12891419

12901420
return (
12911421
(expectedEntry = Object.assign({}, meta, {

0 commit comments

Comments
 (0)