# Query logging
Since 4.1.0.
Query logging, disabled by default, prints one-line JSON objects into the standard output.
Its JSON format follows some ElasticSearch conventions and works nicely with the corresponding stack (FileBeat, ES, Kibana).
# Example
{
"@timestamp": "2023-10-13T14:02:05.973Z",
"message": "query:all",
"application": "ontop-odh",
"payload": {
"queryId": "36ade6c6-f091-4af2-9828-ee6316e191f4",
"classesUsedInQuery": [
"http://schema.org/Hotel"
],
"propertiesUsedInQuery": [
"http://schema.org/name"
],
"tables": [
"\"v_accommodationsopen\""
],
"reformulationDuration": 50,
"reformulationCacheHit": false,
"user": "joe",
"groups": "admins,users",
"roles": "my_app_write,my_app_reader",
"httpHeaders": {
"referer": "http://localhost:8080/"
},
"extractedQueryTemplate": {
"hash": "de167012e1ce3cf9dce66a986a3343d883a1f319f800132565b614498d9c73d8",
"parameters": {
"v0": "\"Residence Tuberis\""
}
},
"sparqlQuery": "PREFIX schema: <http://schema.org/>\nSELECT * WHERE {\n ?h a schema:Hotel ; schema:name ?name .\n FILTER (langMatches(lang(?name), 'en'))\n FILTER(str(?name) = \"Residence Tuberis\")\n} \nLIMIT 10",
"reformulatedQuery": "ans1(h,name)\nCONSTRUCT [h, name] [name/\"Residence Tuberis\"^^@en, h/RDF(http://noi.example.org/data/accommodation/{}(VARCHARToTEXT(Id1m148)),IRI)]\n NATIVE [Id1m148]\nSELECT v1.\"Id\" AS \"Id1m148\"\nFROM \"v_accommodationsopen\" v1\nWHERE ('Residence Tuberis' = v1.\"AccoDetail-en-Name\" AND 'HotelPension' = v1.\"AccoTypeId\")\nLIMIT 10\n",
"executionBeforeUnblockingDuration": 8,
"executionAndFetchingDuration": 30,
"totalDuration": 80,
"resultCount": 10
}
}
# Entries
Key | Type | Description |
---|---|---|
@timestamp | Timestamp | |
message | String | Type of the message. It always start with the prefix query: . Its default value is query:all . In case of an exception, the value starts with query:exception- . |
application | String | Controlled by the property ontop.applicationName . |
payload | JSON object | Gathers the entries below. |
queryId | UUID | Unique to each query. |
classesUsedInQuery | Array of IRIs | IRIs of the classes appearing in the SPARQL query. |
propertiesUsedInQuery | Array of IRIs | IRIs of the properties appearing in the SPARQL query. |
tables | Array of Strings | Names of the relations appearing in the SQL query. |
reformulationDuration | Integer | Query reformulation duration (in ms). |
reformulationCacheHit | Boolean | True if the reformulated query cache has been used |
user | String | Since 5.2.0. User ID. Disabled by default |
groups | String | Since 5.2.0. User groups separated by commas. Disabled by default |
roles | String | Since 5.2.0. User roles separated by commas. Disabled by default |
httpHeaders | JSON object | Values of a specific list of HTTP headers. By default, this list is empty. To track for instance the referer, set the property ontop.queryLogging.includeHttpHeader.referer to true. |
extractedQueryTemplate. hash | String | Hash of the query template extracted, after removing extracted constants. Can be shared by similar queries. |
extractedQueryTemplate. parameters | JSON object | Constants extracted and replaced by variables. |
sparqlQuery | String | SPARQL query. |
reformulatedQuery | String | Includes the SQL query and the post-processing. |
executionBefore UnblockingDuration | Integer | Duration between the moments where the SQL query is sent and the result set is unblocked (in ms). |
executionAndFetching Duration | Integer | Duration between the moments where the SQL query is sent and the last result is fetched (in ms). |
totalDuration | Integer | Total duration (in ms). |
resultCount | Integer | Number of results returned. |
# Default settings
# Query logging is disabled by default
ontop.queryLogging=false
# Application name (needed for logging)
ontop.applicationName=Ontop
# Includes the SPARQL query string into the query log
ontop.queryLogging.includeSparqlQuery=true
# Includes the reformulated query into the query log
ontop.queryLogging.includeReformulatedQuery=false
# Includes classes and properties into the query log
ontop.queryLogging.includeClassesAndProperties=true
# Includes DB tables/views into the query log
ontop.queryLogging.includeTables=true
# Includes the user ID, his/her groups and roles
ontop.queryLogging.includeUserInfo=false
# Provides separated message at different phases (after reformulation, result set unblocked, last result fetched)
ontop.queryLogging.decomposition=false
# Sets that merged messages are only inserted when decomposition is disabled
ontop.queryLogging.decompositionAndMergingMutuallyExclusive=true