Как мне регистрировать ошибки при написании пользовательского модуля varnish?

#varnish #vcl

#varnish #vcl

Вопрос:

Я изучаю varnish и расширяю varnish vmod с помощью встроенного кода на C. И я начинаю с написания собственного пользовательского модуля varnish. Я хочу регистрировать ошибки и сбои в моем пользовательском модуле. Как мне этого добиться?

У меня есть варианты выбора из различных библиотек ведения журнала, доступных для C. Но я хочу проверить, есть ли какая-либо встроенная библиотека varnish, чтобы использовать ее. Ниже приведен мой пример кода файла vmod c.

 #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,amp;error);
     if (!jobj) {
          // error log here
          return JSON_ERROR;
     }
     return return_code;
}

 

Я хочу, чтобы строка журнала ошибок добавлялась в файл журнала cutom, когда условие if в приведенном выше коде выполняется. Пожалуйста, помогите.

Ответ №1:

Вы хотите VSLb :

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

Если вам нужно создать строку большего размера или вам нужны выделения, используйте WS_* функции, их выделения освобождаются в конце rquest автоматически.

Посмотрите, как std.log() это происходит: https://github.com/varnishcache/varnish-cache/blob/389d7ba28e0d0e3a2d5c30a959aa517e5166b246/vmod/vmod_std.c#L145-L153