node.js - Strukturerte logger i Google Cloud Run blir ikke analysert (bruker Winston for logging)
Jeg forsøker å formatere loggene mine på en måte som gjør at Google Cloud riktig vil hente ut loggnivået. Dette kjører på Cloud Run, med TypeScript. Cloud Run henter loggene fra containerutgangen.
Hvis jeg gjør følgende, parser Google logglinjen korrekt:
console.log(JSON.stringify({
severity: 'ERROR',
message: 'This is testing a structured log error for GCP'
}));
Og loggutdata ser slik ut:
Jeg har prøvd en rekke forskjellige måter å formatere med Winston på, og endte opp med følgende:
useFormat = format.combine(
format((info, opts) => {
info['severity'] = info.level;
delete info.level;
return info;
})(),
format.json());
this.winston = winston.createLogger({
level: logLevel,
format: useFormat,
transports: [new winston.transports.Console()]
});
Som ser ut til å fungere (det skriver ut json-linjen riktig), jeg får dette i GCP-loggene:
All hjelp verdsettes.
Svar #1
Det viser seg at jeg var nær, jeg trengte bare å .upperCase() loggnivået (og jeg mapper Verbose -> Debug, jeg forstår egentlig ikke hvorfor GCP bestemte seg for å bruke et helt annet loggnivåsystem enn alle andre). Ny kode:
useFormat =
format.combine(
format((info, opts) => {
let level = info.level.toUpperCase();
if(level === 'VERBOSE') {
level = 'DEBUG';
}
info['severity'] = level;
delete info.level;
return info;
})(),
format.json());

