Log

QuestDB log provides database information. This page presents log level, their details, and where to configure and find the log.

Log location

QuestDB open source

QuestDB creates the following file structure in its root_directory:

questdb
├── conf
├── db
├── log
├── public
└── snapshot (optional)

Log files are stored in the log folder:

├── log
│   ├── stdout-2020-04-15T11-59-59.txt
│   └── stdout-2020-04-12T13-31-22.txt

Log levels

QuestDB log provides the following types of log information:

TypeMarkerDetailsDefault
AdvisoryAStartup information such as hosts, listening ports, etc. Rarely used after startupEnabled
CriticalCInternal database errors. Serious issues. Things that should not happen in general operation.Enabled
ErrorEAn error, usually (but not always) caused by a user action such as inserting a symbol into a timestamp column. For context on how this error happened, check for Info-level messages logged before the error.Enabled
InfoILogs for activities. Info-level messages often provide context for an error if one is logged later.Enabled
DebugDFiner details on what is happening. Useful to debug issues.Disabled

For more information, see the source code on GH.

Log examples

The below is some examples of log messages by type.

Advisory:

2023-02-24T14:59:45.076113Z A server-main Config:
2023-02-24T14:59:45.076130Z A server-main - http.enabled : true
2023-02-24T14:59:45.076144Z A server-main - tcp.enabled : true
2023-02-24T14:59:45.076159Z A server-main - pg.enabled : true

Critical:


2022-08-08T11:15:13.040767Z C i.q.c.p.WriterPool could not open [table=`sys.text_import_log`, thread=1, ex=could not open read-write [file=/opt/homebrew/var/questdb/db/sys.text_import_log/_todo_], errno=13]
...
2022-08-23T07:55:15.490045Z C i.q.c.h.p.JsonQueryProcessorState [77] internal error [q=`REINDEX TABLE 'weather' COLUMN timestamp LOCK EXCLUSIVE;`, ex=
...
2022-11-17T10:28:00.464140Z C i.q.c.h.p.JsonQueryProcessorState [7] Uh-oh. Error!

Error:

2023-02-24T14:59:45.059012Z I i.q.c.t.t.InputFormatConfiguration loading input format config [resource=/text_loader.json]
...
2023-03-20T08:38:17.076744Z E i.q.c.l.u.AbstractLineProtoUdpReceiver could not set receive buffer size [fd=140, size=8388608, errno=55]
...
2022-08-03T11:13:41.947760Z E server-main [errno=48] could not bind socket [who=http-server, bindTo=0.0.0.0:9000]

Info:

2020-04-15T16:42:32.879970Z I i.q.c.TableReader new transaction [txn=2, transientRowCount=1, fixedRowCount=1, maxTimestamp=1585755801000000, attempts=0]
2020-04-15T16:42:32.880051Z I i.q.g.FunctionParser call to_timestamp('2020-05-01:15:43:21','yyyy-MM-dd:HH:mm:ss') -> to_timestamp(Ss)
2020-04-15T16:42:32.880657Z I i.q.c.p.WriterPool >> [table=`table_1`, thread=12]
2020-04-15T16:42:32.881330Z I i.q.c.AppendMemory truncated and closed [fd=32]
2020-04-15T16:42:32.881448Z I i.q.c.AppendMemory open /usr/local/var/questdb/db/table_1/2020-05/timestamp.d [fd=32, pageSize=16777216]
2020-04-15T16:42:32.881708Z I i.q.c.AppendMemory truncated and closed [fd=33]

Debug:

2023-03-31T11:47:05.723715Z D i.q.g.FunctionParser call cast(investmentMill,INT) -> cast(Li)
2023-03-31T11:47:05.723729Z D i.q.g.FunctionParser call rnd_symbol(4,4,4,2) -> rnd_symbol(iiii)
2023-03-31T11:47:05.723749Z D i.q.g.FunctionParser call investmentMill * 950399 -> *(LL)
2023-03-31T11:47:05.723794Z D i.q.g.FunctionParser call cast(1672531200000000L,TIMESTAMP) -> cast(Ln)
2023-03-31T11:47:05.723803Z D i.q.g.FunctionParser call cast(1672531200000000L,TIMESTAMP) + investmentMill * 950399 -> +(NL)

Log configuration

QuestDB logging can be configured globally to DEBUG via either providing the java option -Debug or setting the environment variable QDB_DEBUG=true. See reference manual for details on logging configuration.