-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy pathlogging.js
66 lines (61 loc) · 1.92 KB
/
logging.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import Pino from 'pino';
import PinoHttp from 'pino-http';
/**
* Set project Id for log correlation in request-based logger
* @param {string} projectId - Google Cloud Platform Project Id
*/
let project;
export const initLogCorrelation = (projectId) => {
project = projectId;
};
/**
* Create a custom formatter to set the "severity" property in the JSON payload
* to the log level to be automatically parsed
* https://github.com/winstonjs/winston#creating-custom-formats
* https://cloud.google.com/run/docs/logging#special-fields
* https://getpino.io/#/docs/api?id=formatters-object
*/
const formatters = {
level(label) {
return { severity: label };
},
};
/**
* Initialize pino logger
*/
export const logger = Pino({
formatters,
// Set log message property name to "message" for automatic parsing
messageKey: 'message',
});
/**
* Create request-based logger with trace ID field for logging correlation
* For more info, see https://cloud.google.com/run/docs/logging#correlate-logs
*/
export const pinoHttp = PinoHttp({
logger,
reqCustomProps: function (req) {
const traceHeader = req.header('X-Cloud-Trace-Context');
let trace;
if (traceHeader) {
const [traceId] = traceHeader.split('/');
trace = `projects/${project}/traces/${traceId}`;
}
return {
'logging.googleapis.com/trace': trace,
};
},
});