I really love clickhouse logs. They helped me a lot of times, they 'tell stories' :) 

But on limited env (like tiny cloud instances) people often set the main log level from trace to information, or just disable it at all, keeping err log only - and motivation is very simple - logs are quite big, they take disk space & part of disk bandwidth - and that effect is very visible on tiny instances.

Maybe if we would compress them with LZ4 (streaming) it will be fewer reasons to disable them? 

What do you think of that? (I'm not totally convinced if it's good, because logs usually are expected to be straight and simple). 
char buf[signal_pipe_buf_size];
    DB::WriteBufferFromFileDescriptorDiscardOnFailure out(signal_pipe.fds_rw[1], signal_pipe_buf_size, buf);
    const ucontext_t signal_context = *reinterpret_cast<ucontext_t *>(context);
    const StackTrace stack_trace(signal_context);
    StringRef query_id = DB::CurrentThread::getQueryId();   
    query_id.size = std::min(query_id.size, max_query_id_size);
    DB::writeBinary(sig, out);
    DB::writePODBinary(*info, out);
    DB::writePODBinary(signal_context, out);
    DB::writePODBinary(stack_trace, out);
    DB::writeBinary(UInt32(getThreadId()), out);
    DB::writeStringBinary(query_id, out);
    DB::writePODBinary(DB::current_thread, out);
    out.next();
    if (sig != SIGTSTP) 
    {
        
        sleepForSeconds(20);  
        call_default_signal_handler(sig);
    }
    errno = saved_errno;
}
__attribute__((__weak__)) void collectCrashLog(
    Int32 signal, UInt64 thread_id, const String & query_id, const StackTrace & stack_trace);
/** The thread that read info about signal or std::terminate from pipe.
  * On HUP / USR1, close log files (for new files to be opened later).
  * On information about std::terminate, write it to log.
  * On other signals, write info to log.
  */
class SignalListener : public Poco::Runnable