Google App Engine flexible environment automatically pipes stdout and stderr to Stackdriver (Google Cloud Logging). But this only supports plain text log message without any
You could use the Logback appender + Implement LoggingEnhacer
public class LogEnhancer implements LoggingEnhancer {
@Override
public void enhanceLogEntry(LogEntry.Builder logEntry) {
// add Labels
logEntry.addLabel("project", "conversational-services");
// Transform textPayload to JSONPayload
ObjectMapper mapper = new ObjectMapper();
Builder structBuilder = Struct.newBuilder();
String textPayload = logEntry.build().getPayload().getData().toString();
try {
// Validate JSON Payload
mapper.readTree(textPayload);
JsonFormat.parser().merge(textPayload, structBuilder);
logEntry.setPayload(JsonPayload.of(structBuilder.build()));
} catch (InvalidProtocolBufferException e) {
// Error reporting an error! FML
System.err.println(e.getMessage());
} catch (IOException e) {
// Do nothing (there is not a JSON Payload)
}
}
}
This class add labels and transform a JSON String in a JSONPayload
You need to specify the LoggingEnhacer on the logback.xml file
INFO
application.log
gae_app
[path_for_your_logging_enhancer_class]
WARN