@NonNull
    @WorkerThread
    public static LogResult createLog(
        final String geocode, final OfflineLogEntry logEntry, final Map<String, Trackable> inventory) {
        if (StringUtils.isBlank(logEntry.log)) {
            return generateLogError("GCWebAPI.postLog: No log text given");
        }

        //1.) Call log page and get a valid CSRF Token
        final String csrfToken = getCsrfToken();
        if (csrfToken == null) {
            return generateLogError("Log Post: unable to extract CSRF Token");
        }

        //2,) Fill Log Entry object and post it
        final GCWebLogRequest logEntryRequest = createLogRequest(logEntry, inventory);

        try (GCWebLogResponse response = websiteReq().uri("/api/live/v1/logs/" + geocode + "/geocacheLog")
                .method(HttpRequest.Method.POST)
                .headers(HTML_HEADER_CSRF_TOKEN, csrfToken)
                .bodyJson(logEntryRequest)
                .requestJson(GCWebLogResponse.class).blockingGet()) {

            if (response.logReferenceCode == null) {
                return generateLogError("CreateLog: Problem with server, request JSON=[" + HttpRequest.getJsonBody(logEntryRequest) +
                        "], response=[" + response + "]");
            }

            return LogResult.ok(response.logReferenceCode);
        }
    }
Provides methods to handle all aspects of creating, editing and deleting Log entries for GC.com (both caches and trackables)
main/src/main/java/cgeo/geocaching/connector/gc/GCLogAPI.java