Logging-opties in Apps Script
Apps Script heeft drie logging-mechanismes, elk voor een ander doel:
- Logger.log(): zichtbaar in de Apps Script-editor onder Uitvoeringslogboek. Handig tijdens ontwikkeling.
- console.log(): stuurt naar Google Cloud Logging (vroeger Stackdriver genoemd). Blijft langer bewaard en is doorzoekbaar.
- Aangepaste sheet-log: schrijft naar een spreadsheet voor business-audit-trails.
function logVoorbeelden() {
Logger.log('Eenvoudige string');
Logger.log('Object: %s', JSON.stringify({sleutel: 'waarde'}));
console.log('Naar Cloud Logging');
console.info('Info niveau');
console.warn('Waarschuwing niveau');
console.error('Fout niveau');
}
Logger of console: wat kies je?
Gebruik Logger.log() tijdens het ontwikkelen om snel iets te zien in de editor. Gebruik console.log() voor alles wat je later wilt terugvinden of analyseren, want die output komt in Cloud Logging en blijft langer staan.
Gestructureerde logging
Door je logregels als JSON weg te schrijven, kun je ze in Cloud Logging filteren op velden zoals niveau, gebruiker en context.
const LogNiveau = {
DEBUG: 'DEBUG',
INFO: 'INFO',
WARN: 'WARN',
ERROR: 'ERROR',
};
function log(niveau, bericht, context = {}) {
const entry = {
tijdstip: new Date().toISOString(),
niveau,
bericht,
gebruiker: Session.getActiveUser().getEmail(),
script: 'mijn-script-naam',
...context,
};
const logString = JSON.stringify(entry);
if (niveau === LogNiveau.ERROR) {
console.error(logString);
} else if (niveau === LogNiveau.WARN) {
console.warn(logString);
} else {
console.log(logString);
}
return entry;
}
Audit-log naar Sheets
Voor business-gebeurtenissen die niet-technisch leesbaar moeten blijven, is een audit-tabblad in een spreadsheet vaak handiger dan een technisch log.
function schrijfAuditLog(actie, details, status = 'SUCCESS') {
const blad = SpreadsheetApp.openById('AUDIT_SHEET_ID')
.getSheetByName('Auditlog');
const lock = LockService.getScriptLock();
try {
lock.waitLock(5000);
blad.appendRow([
new Date(),
Session.getActiveUser().getEmail(),
actie,
details,
status,
]);
} finally {
lock.releaseLock();
}
}
function verwerkBestelling(bestellingId) {
schrijfAuditLog('BESTELLING_GESTART', `Bestelling ${bestellingId}`);
try {
Logger.log(`Verwerking bestelling ${bestellingId}`);
schrijfAuditLog('BESTELLING_VERWERKT', `Bestelling ${bestellingId} klaar`);
} catch(e) {
schrijfAuditLog('BESTELLING_FOUT', e.message, 'ERROR');
throw e;
}
}
Voorkom race conditions
Gebruik LockService.getScriptLock() bij het schrijven naar een gedeeld audit-logblad. Zonder lock kunnen twee gelijktijdige uitvoeringen dezelfde rij overschrijven of regels door elkaar schrijven.
Uitvoeringslogboek bekijken
Het uitvoeringslogboek is toegankelijk via de Apps Script-editor en het menu-item Uitvoeringslogboek. Hier zie je de laatste uitvoeringen met datum, duur, triggers en eventuele fouten. Dit logboek blijft maar kort bewaard, dus voor langere bewaring leun je op Cloud Logging.
function logMetTijdsmeting() {
const startTijd = Date.now();
Utilities.sleep(500);
const tussentijd = Date.now() - startTijd;
Logger.log(`Stap 1 klaar na ${tussentijd}ms`);
Utilities.sleep(300);
const totaal = Date.now() - startTijd;
Logger.log(`Totale uitvoertijd: ${totaal}ms`);
}
Foutmeldingen naar e-mail sturen
Een wrapper die fouten opvangt, logt en doorstuurt zorgt dat je niet afhankelijk bent van iemand die toevallig in de logs kijkt.
function withErrorNotification(fn, functieNaam) {
try {
return fn();
} catch(e) {
const foutmelding = `
Fout in script: ${functieNaam}
Tijdstip: ${new Date().toLocaleString('nl-NL')}
Foutbericht: ${e.message}
Stack: ${e.stack || 'Niet beschikbaar'}
`.trim();
GmailApp.sendEmail(
'beheer@bedrijf.nl',
`Apps Script fout: ${functieNaam}`,
foutmelding
);
console.error(JSON.stringify({
type: 'SCRIPT_FOUT',
functie: functieNaam,
fout: e.message,
stack: e.stack,
}));
throw e;
}
}
function mijnTriggerFunctie() {
withErrorNotification(() => {
Logger.log('Script gestart');
}, 'mijnTriggerFunctie');
}
Cloud Logging gebruiken
Met een gestructureerde JSON-regel inclusief severity en labels kun je in Cloud Logging gericht filteren en grafieken maken.
function schrijfNaarCloudLogging() {
console.log(JSON.stringify({
severity: 'INFO',
message: 'Dagelijkse verwerking gestart',
aantalRijen: 150,
duurMs: 2340,
labels: {
omgeving: 'productie',
versie: '2.1.0',
},
}));
}
Bekijk de logs via de Google Cloud-console onder Logging en de Log Verkenner. Filter op resource.type="app_script_function" om alleen logregels van Apps Script-functies te zien. Wil je dit gebruiken, koppel dan je Apps Script-project aan een Google Cloud-project (een standaardproject of een eigen project).
Gecentraliseerde fout-logging implementeren
- Maak een
log(niveau, bericht, context)-functie die naarconsoleen optioneel een sheet schrijft. - Maak een
withErrorNotification(fn, naam)-wrapper die fouten opvangt en doorstuurt. - Wikkel alle trigger-functies in de error-wrapper.
- Stuur kritieke fouten naar een beheerder via
GmailApp.sendEmail. - Schrijf succesvolle operaties naar een audit-sheet met
LockService.
Hoe lang bewaart Apps Script het uitvoeringslogboek?
Het uitvoeringslogboek in de editor blijft maar kort bewaard en is vooral bedoeld voor realtime debuggen. Voor langere bewaring gebruik je Cloud Logging, dat de logs een stuk langer vasthoudt volgens de quota van je Google Cloud-project.
Hoe lang blijven mijn logs in Cloud Logging staan?
De bewaartermijn hangt af van de instellingen van je Cloud Logging-bucket. De standaardbewaring is doorgaans dertig dagen, maar dat is per bucket aan te passen. Controleer de actuele waarde in de Google Cloud-console onder Logging.
Kan ik alerts instellen op fouten?
Ja. Via Google Cloud Monitoring kun je een alertbeleid maken dat een melding stuurt zodra er fout-logregels van je Apps Script-functies binnenkomen.
Waarom zie ik mijn console.log niet in de editor?
console.log() schrijft naar Cloud Logging, niet naar het uitvoeringslogboek in de editor. Gebruik Logger.log() als je de output direct in de editor wilt zien.
Wat is het verschil tussen Stackdriver en Cloud Logging?
Het zijn dezelfde dienst. Stackdriver was de oude merknaam; Google noemt het tegenwoordig gewoon Cloud Logging. Oudere artikelen en sommige codevoorbeelden gebruiken nog de term Stackdriver.
Hoe log ik vanuit een trigger die op de achtergrond draait?
Logregels uit trigger-uitvoeringen verschijnen in het uitvoeringslogboek en, als je console gebruikt, ook in Cloud Logging. Cloud Logging is beschikbaar ongeacht het uitvoeringstype, dus dat is de betrouwbaarste plek voor achtergrondtaken.
Goede logging is essentieel voor productie-scripts. Met een combinatie van Cloud Logging voor technische logs en een audit-sheet voor business-gebeurtenissen heb je volledige zichtbaarheid in je automatiseringsworkflows.