Skip to main content

include syntax

I'm about to implement configuration file includes, and although the implementation is quite straightforward, the syntax to be used is something to give a thought or two.

Currently the syslog-ng configuration file consists of statements, each with the following basic format:

stmt [] { ... };

The "id" gives a unique identifier of the statement, and the braces enclose the contents. Currently only the ID part is optional, the braces are always there.

To make the include statement consistent with that, it'd have to look something like:

include { "filename" };

Obviously I don't like this too much, as it is way different from all other applications permitting the use of include statements. What about this:

include "filename";

E.g. use the ID part the name of the file to be included. I like this better. A third option might be the use of 'pragma' directives, currently only used to specify the file format compatibility in the case of syslog-ng 3.0:

@version: 3.0

This'd mean that include statements would look like this:

@include: filename

The problem with this last option is that pragmas are currently only processed at the beginning of the configuration file. So that code should also be generalized.

I think I'd go with the second option, that's not completely inconsistent, but still the most intuitive to use.

What do you think?

Comments

Christopher Cashell said…
I think the first option, which most closely matches existing Syslog-NG syntax, would be my preference.

One advantage of it is that it makes it easy to list multiple files in a way that's consistent with existing syntax. Something like:

include { "filename1";
"filename2";
};

Or, maybe even:

include { file("filename1");
file("filename2");
directory("/etc/syslog-ng/inc/"); };

if you wanted to include an include directory. An argument could be made that rather than increasing the complexity of the config with file/directory statements, syslog-ng could just interpret a path that ends in '/' as a directory to include, rather than a file, and I wouldn't necessarily argue against that, either.

Regardless, I can see some definite use for this feature. At my last job, we had a syslog-ng box with a config approaching 1000 lines long. Being able to split it up would have made editing a lot easier.
Bazsi said…
This is an old blog post, and this functionality has already been implemented in syslog-ng 3.0.

Popular posts from this blog

syslog-ng fun with performance

I like christmas for a number of reasons: in addition to the traditional "meet and have fun with your family", eat lots of delicious food and so on, I like it because this is the season of the year when I have some time to do whatever I feel like. This year I felt like doing some syslog-ng performance analysis. After reading Ulrich Deppert's series about stuff "What every programmer should know about memory" on LWN, I thought I'm more than prepared to improve syslog-ng performance. Before going any further, I'd recommend this reading to any programmer, it's a bit long but every second reading it is worth it. As you need to measure performance in order to improve it, I wrote a tool called "loggen". This program generates messages messages at a user-specifyable rate. Apart from the git repository you can get this tool from the latest syslog-ng snapshots. Loggen supports TCP, UDP and UNIX domain sockets, so really almost everything can be me...

syslog-ng contributions redefined

syslog-ng has been around for about 12 years now, but I think the biggest change in the project's life is imminent: with the upcoming release of syslog-ng OSE 3.2, syslog-ng will become an independent entity. Until now, syslog-ng was primarily maintained & developed by BalaBit, copyrights needed to be reassigned in order to grant BalaBit special privileges. BalaBit used her privileges to create a dual-licensed fork of syslog-ng, named "syslog-ng Premium Edition". The value we offer over the Open Source Edition of syslog-ng are things that larger enterprises require: support on a large number of UNIX platforms (27 as of 3.1), smaller and larger feature differences (like the encrypted/digitally signed logfile feature) better test coverage and release management longer term support Although perfectly legal, this business model was not welcome in various Free Software communities, and has caused friction and harm, because BalaBit has enjoyed a privilege that no others cou...

syslog-ng message parsing

Earlier this month, I announced the new syslog-ng 3.0 git tree, adding a lot of new features to syslog-ng Open Source Edition. I thought it'd be useful to describe the new features with some more details, so this time I'd write about message parsing. First of all, the message structure was a bit generalized in syslog-ng. Earlier it was encapsulating a syslog message and had little space to anything beyond that. That is, every log message that syslog-ng handled had date, host , program and message fields, but syslog-ng didn't care about message contents. This has changed, a LogMessage became a set of name-value pairs , with some "built-in" pairs that correspond to the parts of a syslog message. The aim with this change is: new name-value pairs can be associated with messages through the use of a parsing. It is now possible to parse non-syslog logs and use the columns the same way you could do it with syslog fields. Use them in the name of files, SQL tables or c...