编写自定义清漆模块时如何记录错误?

时间:2019-04-19 07:25:48

标签: varnish vcl

我正在学习清漆,并打算使用内联C代码扩展清漆vmod。我首先编写自己的自定义清漆模块。我想从自定义模块记录错误和失败。我该如何实现?

我有从C可用的各种日志记录库中选择的选项。但是我想检查是否有任何内置的清漆库可以使用它。下面是我的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,&error);
     if (!jobj) {
          // error log here
          return JSON_ERROR;
     }
     return return_code;
}

当上面代码中的if条件为true时,我希望将一个错误日志行添加到一个cutom日志文件中。请帮忙。

1 个答案:

答案 0 :(得分:0)

您要VSLb

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

如果您需要构建更大的字符串或需要分配,请使用WS_*函数,它们的分配将在rquest的末尾自动释放。

查看std.log()的工作方式:https://github.com/varnishcache/varnish-cache/blob/master/lib/libvmod_std/vmod_std.c#L143