Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do i log errors while writing custom varnish module?

Tags:

varnish

vcl

I am learning varnish and about extending the varnish vmod with inline c code. And I am starting it with writing my own custom varnish module. I want to log errors and failure from my custom module. How do i achieve that?

I have options to choose from various logging libraries available for C. But i want to check if there is any inbuilt varnish library to make use of it. Below is my sample code of a vmod c file.

#include "vrt.h"
#include "cache/cache.h"
#include "vcc_if.h"
#include <jansson.h>

#define JSON_ERROR "-1"
#define JSON_LOC "/etc/example.json"


VCL_STRING
vmod_validate_mymod(VRT_CTX) {
     (void) ctx;
     char *return_code = "0";
     json_t *jobj;
     json_error_t error;
     jobj = json_load_file(JSON_LOC,0,&error);
     if (!jobj) {
          // error log here
          return JSON_ERROR;
     }
     return return_code;
}

I want en error log line to be added in a cutom log file when the the if condition in the code above is true. Please help.

like image 389
codename_x Avatar asked Feb 04 '26 21:02

codename_x


1 Answers

You want VSLb:

VSLb(ctx->vsl, SLT_VCL_Log, "%d", 5);

If you need to build larger string, or need allocations, use the WS_* functions, their allocations are freed at the end of the rquest automatically.

See how std.log() does it: https://github.com/varnishcache/varnish-cache/blob/389d7ba28e0d0e3a2d5c30a959aa517e5166b246/vmod/vmod_std.c#L145-L153

like image 79
Guillaume Quintard Avatar answered Feb 09 '26 03:02

Guillaume Quintard



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!