Thanks Rob. Let me give it a try!<br><br><div class="gmail_quote">2010/7/8 Rob S <span dir="ltr"><<a href="mailto:rtshilston@gmail.com">rtshilston@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">zabrane Mikael wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Rob,<br>
<br>
    I don't think that's going to be possible with a pure VCL<br>
    approach.  Can you give us a better idea of exactly what you're<br>
    trying to achieve, as there might be a simpler / more<br>
    Varnish-friendly way of achieving what you're after.<br>
<br>
<br>
To make it simple, I'd like to store for a document A, all its raw headers (both request and response) for later processing.<br>
A cron job will collect them (i.e these stored files) and send them to a complex analysis system.<br>
<br>
    You can certainly use varnishlog to see the full headers for a<br>
    given UUID<br>
<br>
<br>
I'll give it try!<br>
<br>
    but the body content is more difficult.<br>
<br>
<br>
Is there another way to achieve that?<br>
Maybe by using some C to implement a callback for handling raw "request" and "response".<br>
</blockquote></div></div>
You could use some C, but I don't know enough to comment about race conditions between concurrent requests if the same UUID came in at about the same time, or how to work gracefully if Varnish queued some concurrent requests to the same resource. <br>

If the UUID isn't that important, I'd consider doing the following:<br>
<br>
Set up additional backends, on 127.0.0.2, called 'loggedsquid' and 'loggedcustomerserver'.  Then, approximately have:<div class="im"><br>
<br>
<br>
 // set default backend<br>
 set req.backend = squid;<br>
<br>
 if (req.http.X-RAWDATA != "") {<br>
       set req.backend = customserver;<br>
 }<br>
<br></div>
if (req.http.X-STORE!= "") {<br>
    set req.backend = loggedsquid;<div class="im"><br>
<br>
    if (req.http.X-RAWDATA != "") {<br></div>
       set req.backend = loggedcustomserver;<br>
    }<br>
 }<br>
<br>
THEN, on the varnish server, run (approximately) " tcpdump -s 0 -w loggedtraffic.pcap -d lo ip and host 127.0.0.2 "<br>
<br>
Finally, on the cron, you could parse the pcap file, as that'd have the full headers and body, all in one coherent place.  Indeed, if the UUID is essential, there's no reason why you couldn't parse it out of the pcap file, work out the tcp port number for that request, then reparse the pcap to write out the packet contents to a specific file for that UUID.<br>

<br>
I suppose it all depends on how regularly this logging would happen.<br><font color="#888888">
<br>
<br>
Rob<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Regards<br>Zabrane<br>