[syslog-ng] Using macro substring as another macro

Balazs Scheidler bazsi at balabit.hu
Fri Apr 8 00:57:03 CEST 2011


On Thu, 2011-04-07 at 15:20 +0200, Gergely Nagy wrote:
> Jakub Jankowski <shasta at toxcorp.com> writes:
> 
> > I'd like to implement simple hashing in file() destination, mainly to avoid 
> > ext3 32k directories limit, but also for convenience. Is it possible to do 
> > something simliar what this shell snippet does:
> >
> > $ NAME=value
> > $ echo ${NAME[*]:0:1}
> > v
> > $
> >
> > but for macros (especially those coming from parsers)?
> 
> Off the top of my head: no, it's not currently possible with stock
> syslog-ng (except with some dirty hacks I'd rather not share). On the
> other hand, writing a template function that would do just what you want
> should be very very easy.
> 
> > What I want is logs written to /var/log/h/ho/hos/hostname/service.log (with 
> > configurable level of subdirs) using a single destination().
> 
> I can throw together a patch that would introduce a $(substr START END
> STR) template function, which you could use like this:
> 
> destination d_file {
>  file ("/var/log/$(substr 1 1 ${HOST})/$(substr 1 2 ${HOST})/$(substr 1 3 ${HOST})/${HOST}/service.log");
> };
> 
> It's a bit more verbose than ${NAME[*]:0:1}, but does pretty much the
> same thing.
> 
> I'll knock something up either tonight or sometime tomorrow, both for
> syslog-ng 3.2 and for 3.3 aswell. On the other hand, if you have basic C
> knowledge, you can do this too, and it's actually quite fun to do so!
> 
> I've written a short blog post a few months ago about writing trivial
> template functions, that should be enough to get you started:
> 
> http://algernon.blogs.balabit.com/2011/01/howto-write-a-simple-template-function-for-syslog-ng/
> 
> If anyone beats me to it: you're my guest for your (reasonable) choice
> of beverage if you ever come to Hungary, or wherever we might meet.
> 

Ah, I didn't know that article, but it's definitely worth a read, who
has a seemingly complex issue with generating filenames or content.

PS: I'm thinking about how to invent a complete functional language in
syslog-ng template functions, yammm :) No, not really :)


-- 
Bazsi



More information about the syslog-ng mailing list