Logging von Groovy in Elasticsearch

Bei der Arbeit an der Volltextindizierung für die Elasticsearch-Integration für Neos brauchte ich kürzlich eine Möglichkeit, um zu debuggen, was in einem von uns verwendeten Groovy-Skript vor sich geht. Es ist relativ einfach, wenn du weißt, wie...

Sobald ein solcher Bedarf auftaucht, führt eine schnelle Internetsuche zu einem schnellen Ergebnis wie diesem:

import org.elasticsearch.common.logging.*;
ESLogger logger=ESLoggerFactory.getLogger('some.identifier');
logger.info('Ah, eine Logmeldung!');

Dies sollte im Elasticsearch-Serverprotokoll ähnlich wie hier protokolliert werden:

[2016-10-19 18:21:09,534][INFO ][some.identifier] Aha, eine Logmeldung!
 

Das ist zwar richtig, aber du brauchst wahrscheinlich noch eine weitere Anpassung, wenn du Elasticsearch gemäß den Anweisungen für den Flowpack-Adpater konfiguriert hast. Ohne diese Anpassung siehst du GroovyScriptCompilationException-Fehler in der Datei Data/Logs/ElasticSearch.log.

Da das, was in Groovy aufgerufen werden darf, eingeschränkt ist, musst du die Logging-Bits(org.elasticsearch.common.logging.ESLoggerFactory und org.elasticsearch.common.logging.ESLogger) zur Whitelist der Sandbox-Empfänger hinzufügen:

script.groovy.sandbox.receiver_whitelist: java.util.Iterator, java.lang.Object, java.util.Map, java.util.Map$Entry, org.elasticsearch.common.logging.ESLoggerFactory, org.elasticsearch.common.logging.ESLogger
 

Starte nun deine Elasticsearch-Instanz neu und deine Logmeldungen werden wie erwartet angezeigt.