void aws_crt_log_to_callback()

in src/logging.c [161:200]


void aws_crt_log_to_callback(aws_crt_log_callback *callback, void *user_data) {
    if (callback == NULL) {
        aws_crt_log_stop();
        return;
    }

    crt_logger_impl.channel = aws_mem_calloc(aws_default_allocator(), 1, sizeof(struct aws_logger_pipeline));
    if (crt_logger_impl.channel == NULL) {
        goto cleanup;
    }

    crt_logger_impl.formatter = aws_mem_acquire(aws_default_allocator(), sizeof(struct aws_log_formatter));
    if (crt_logger_impl.formatter == NULL) {
        goto cleanup;
    }
    struct aws_log_formatter_standard_options formatter_options = {.date_format = AWS_DATE_FORMAT_ISO_8601};
    if (aws_log_formatter_init_default(crt_logger_impl.formatter, aws_default_allocator(), &formatter_options)) {
        goto cleanup;
    }

    *(void **)(&crt_logger_impl.log_write) = callback;
    crt_logger_impl.user_data = user_data;
    crt_logger_impl.writer.vtable = &crt_log_writer_vtable;
    crt_logger_impl.writer.allocator = aws_default_allocator();
    crt_logger_impl.writer.impl = &crt_logger_impl;

    if (aws_log_channel_init_foreground(crt_logger_impl.channel, aws_default_allocator(), &crt_logger_impl.writer)) {
        goto cleanup;
    }

    crt_logger.allocator = aws_default_allocator();
    crt_logger.vtable = &crt_logger_vtable;
    crt_logger.p_impl = &crt_logger_impl;
    aws_logger_set(&crt_logger);

    return;

cleanup:
    crt_logger_impl_clean_up(&crt_logger_impl);
}