taopq icon indicating copy to clipboard operation
taopq copied to clipboard

Logging SQL queries and results

Open MeanSquaredError opened this issue 1 year ago • 5 comments

Hi,

I have a project that uses taopq and I am looking for a way to add logging of the PostgreSQL queries/results that taopq emits.

I checked the code but did not see a way to log the generated SQL queries and/or the returned results, e.g. through a calling callback. In case I am not missing something, are there any plans to add logging to the library in the future?

MeanSquaredError avatar Dec 03 '24 16:12 MeanSquaredError

You are correct, currently there are no logging callbacks available. I hope to add some in the future, but I haven't decided on a specific interface and the exact points when a callback is called yet. Any input is appreciated, feel free to list your ideas and what callbacks you envision.

d-frey avatar Dec 03 '24 17:12 d-frey

Thank you for the clarification. I imagine a logging interface similar to the following:

namespace tao::pq
{

enum log_type {
    log_type_query = 0x01, 
    log_type_result = 0x02
};

using log_handler = std::function<void (log_type type, std::string_view message);

void set_log_handler (log_handler handler, log_type type = log_type_query | log_type_result);

}

The user would set the log handler by calling set_log_handler like this

void my_taopq_logger (tao::pq::log_type type, std::string_view message)
{
    // Log the taopq query or result somewhere, e.g. by writing it to std::cout    
}

// Use the default log type which gives us both the query and result
set_log_handler (my_taopq_logger);

In the future, the logging interface could be made more fine-grained, e.g. by allowing logging to be configured per-connection or maybe even per-query. However initially I would be happy to have just a way to enable/disable logging globally.

MeanSquaredError avatar Dec 04 '24 16:12 MeanSquaredError

Even after overwriting all the log functions I still with the examples from test/log I still get a print: NOTICE: relation "my_table" already exists, skipping Perhaps there are still a few places which need to use the logger?

anders-wind avatar May 14 '25 18:05 anders-wind

This looks like an exception, so maybe you didn't catch it and by default its what()-message is printed? Hard to tell without a minimal but complete example.

d-frey avatar May 14 '25 23:05 d-frey

I'm quite sure it's not an exception but I'll try to make a complete example tomorrow 👍

It's from a create table if not exists statement

anders-wind avatar May 15 '25 00:05 anders-wind