Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to log query statement to Neo4j server, is it possible?

Tags:

neo4j

I would like to log the entire query statement to the Neo4j server, however, after searching SO & the docs I have been unsuccessful. I found this SO question, Rest Queries Logged on Neo4j Server, but changing these configuration settings has not achieved what I had hoped. I am working in Golang & using the Go-CQ library to communicate with the REST API in Neo4j version 2.1.5.

What I am looking for is the actual query that is being executed, ideally with the parameters being passed as well. Is it possible to log this information? Any help would be greatly appreciated, thank you!

like image 892
evkline Avatar asked Dec 29 '14 20:12

evkline


People also ask

Can I use SQL in Neo4j?

Neo4j recently released the BI Connector, which is a general JDBC driver that can process SQL queries against a Neo4j graph and return meaningful results. This enables users of tools like Tableau, that generate SQL queries, to plug directly into graphs.

How do I get Neo4j logs?

In most Neo4j server environments, all logs will be found in NEO4J_HOME/logs.

How does query work in Neo4j?

If the query is not already in the Execution Plan Cache, the query is compiled into an execution plan in the Neo4j DBMS. The execution plan executes in the Neo4j DBMS to retrieve data. The Page Cache is used to hold the data in memory.


1 Answers

The following is about http logging which also includes queries + params + results. It is not intended for production settings just debugging and testing.

This should work from 2.1.6, see: https://github.com/neo4j/neo4j/pull/3399

This is currently enabled by setting:

 org.neo4j.server.http.unsafe.content_log.enabled=true

besides setting:

 org.neo4j.server.http.log.enabled=true

In conf/neo4j-server.properties, and by augmenting the pattern (conf/neo4j-http-logging.xml) to output full requests and responses:

 <pattern>%fullRequest\n\n%fullResponse</pattern>

Full section in conf/neo4j-http-logging.xml

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>data/log/http.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>data/log/http.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
      <!-- Note the deliberate misspelling of "referer" in accordance with RFC1616 -->
      <pattern>%h %l %user [%t{dd/MMM/yyyy:HH:mm:ss Z}] "%r" %s %b "%i{Referer}" "%i{User-Agent}" \nRequest:\n%fullRequest\nResponse:\n%fullResponse</pattern>
    </encoder>
  </appender>

  <appender-ref ref="FILE"/>
</configuration>

Which will result in an data/log/http.log file, with content like this:

127.0.0.1 - - [04/Jan/2015:11:23:50 +0100] "POST /db/data/transaction/commit HTTP/1.1" 200 372 "http://localhost:7474/browser/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" 
Request:
POST /db/data/transaction/commit HTTP/1.1
Origin: http://localhost:7474
X-stream: true
Cookie: SQLiteManager_currentLangue=4; __jrDevToolbarSessionId=0x1.b6e143f2c334p-3; JSESSIONID=1AFCE7DCF2D5D7134E933871EBF88252; OSESSIONID=OS1412075842834-2614241454738785158; connect.sid=s%3AkRY6%2B4RyW%2FC2ZUMjfIVqtRRo.shdI5G0zTKSq%2BzKevgXzLEdHnwjUDYP1JFlOhupRf2I; _ga=GA1.1.149316633.1397859613; _mkto_trk=id:773-GON-065&token:_mch-localhost-1384123755719-53900; undefined=0; __atuvc=0%7C47%2C0%7C48%2C1%7C49%2C5%7C50%2C13%7C51
Accept: application/json, text/plain, */*
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Referer: http://localhost:7474/browser/
Host: localhost:7474
DNT: 1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,de-DE;q=0.6,de;q=0.4
Content-Length: 115
Content-Type: application/json;charset=UTF-8

{"statements":[{"statement":"match (n) return count(*)","resultDataContents":["row","graph"],"includeStats":true}]}
Response:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

{"results":[{"columns":["count(*)"],"data":[{"row":[0],"graph":{"nodes":[],"relationships":[]}}],"stats":{"contains_updates":false,"nodes_created":0,"nodes_deleted":0,"properties_set":0,"relationships_created":0,"relationship_deleted":0,"labels_added":0,"labels_removed":0,"indexes_added":0,"indexes_removed":0,"constraints_added":0,"constraints_removed":0}}],"errors":[]}
like image 104
Michael Hunger Avatar answered Dec 12 '22 14:12

Michael Hunger