Tips for debugging VCL

Comments

1 comment

  • Rogier Mulhuijzen

    While we don't support std.syslog directly, we have a streaming log service available that you can use for this sort of thing. See http://docs.fastly.com/guides/log-streaming/setting-up-remote-log-streaming for how to set up a logging endpoint.

    Once you have setup a logging endpoint as described in that document, you should see something like this in your generated VCL:

    vcl log {"syslog bm90IGEgcmVhbCBzaWQK syslog.example.com :: "} req.http.Fastly-Client-IP {" "} {""-""} {" "} {""-""} {" "} now {" "} req.request " " req.url {" "} resp.status;

    The syslog keyword is always there, even if you use other logging services, like an S3 bucket. The two strings after that are the service ID and the endpoint name. These two are used by our logging service to determine where everything after the :: is sent.

    So if you want to send some debugging info through our logging service all you have to do is copy the first part of that line, and paste it where you want in your VCL, followed by the info you want.

    For example:

    ```vcl sub vcl_recv { log {"syslog bm90IGEgcmVhbCBzaWQK syslog.example.com :: RECV: "} req.http.host req.url; if (req.http.Cookie) { log {"syslog bm90IGEgcmVhbCBzaWQK syslog.example.com :: stripping Cookie: "} req.http.Cookie; unset req.http.Cookie;

    FASTLY recv

    if (req.request != "HEAD" && req.request != "GET" && req.request != "FASTLYPURGE") {
      return(pass);
    }
    
    return(lookup);
    

    }

    ... ```

    The curly braces around the strings mean that they're "long strings". This means that double quotes and newlines can be used inside them, as well as other subtle differences. For more info on that see https://www.varnish-cache.org/trac/wiki/VCLSyntaxStrings

Please sign in to leave a comment.