summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-03-28 10:02:22 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2008-03-28 10:02:22 +0000
commitf2fcb032110bc4b590c96b70518a4e1e1e03b279 (patch)
tree31681d4274e556988f1c841160a63fd26cfb8578
parentf4f27d790c811a9c54fff4dc68cbf6896f2d846a (diff)
downloadrsyslog-f2fcb032110bc4b590c96b70518a4e1e1e03b279.tar.gz
rsyslog-f2fcb032110bc4b590c96b70518a4e1e1e03b279.tar.xz
rsyslog-f2fcb032110bc4b590c96b70518a4e1e1e03b279.zip
- changed default file output format to include high-precision timestamps
- added a buid-in template for previous syslogd file format - added new $ActionFileDefaultTemplate directive
-rw-r--r--ChangeLog3
-rw-r--r--conf.c6
-rw-r--r--doc/rsyslog_conf.html2
-rw-r--r--doc/v3compatibility.html49
-rw-r--r--omfile.c18
-rw-r--r--omshell.c3
-rw-r--r--syslogd.c9
-rw-r--r--syslogd.h2
8 files changed, 68 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index eda40ada..364f8fbf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,6 +13,9 @@ Version 3.12.5 (rgerhards), 2008-03-??
logged so that a user can diagnose problems with them
- added compatibility mode for -a, -o and -p options
- MILESTONE: compatibility mode processing finished
+- changed default file output format to include high-precision timestamps
+- added a buid-in template for previous syslogd file format
+- added new $ActionFileDefaultTemplate directive
---------------------------------------------------------------------------
Version 3.12.4 (rgerhards), 2008-03-25
- Greatly enhanced rsyslogd's file write performance by disabling
diff --git a/conf.c b/conf.c
index f88216ef..f3f10ba3 100644
--- a/conf.c
+++ b/conf.c
@@ -530,8 +530,10 @@ finalize_it:
* to hold the largest possible filename.
* rgerhards, 2007-07-25
* updated to include OMSR pointer -- rgerhards, 2007-07-27
+ * updated to include template name -- rgerhards, 2008-03-28
*/
-rsRetVal cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts)
+rsRetVal
+cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts, uchar *pszTpl)
{
register uchar *pName;
int i;
@@ -547,7 +549,7 @@ rsRetVal cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pO
}
*pName = '\0';
- iRet = cflineParseTemplateName(&p, pOMSR, iEntry, iTplOpts, (uchar*) " TradFmt");
+ iRet = cflineParseTemplateName(&p, pOMSR, iEntry, iTplOpts, pszTpl);
RETiRet;
}
diff --git a/doc/rsyslog_conf.html b/doc/rsyslog_conf.html
index 14dad6f6..916056a7 100644
--- a/doc/rsyslog_conf.html
+++ b/doc/rsyslog_conf.html
@@ -64,7 +64,7 @@ unstable...). So you have been warned ;)</p>
many parameter settings modify queue parameters. If in doubt, use the
default, it is usually well-chosen and applicable in most cases.</p>
<ul>
-<li><a href="rsconf1_actionexeconlywhenpreviousissuspended.html">$ActionExecOnlyWhenPreviousIsSuspended</a></li><li>$ActionfileEnableSync [on/<span style="font-weight: bold;">off</span>] - enables file syncing capability of omfile</li>
+<li><a href="rsconf1_actionexeconlywhenpreviousissuspended.html">$ActionExecOnlyWhenPreviousIsSuspended</a></li><li>$ActionFileDefaultTemplate [templateName] - sets a new default template for file actions</li><li>$ActionFileEnableSync [on/<span style="font-weight: bold;">off</span>] - enables file syncing capability of omfile</li>
<li>$ActionQueueCheckpointInterval &lt;number&gt;</li>
<li>$ActionQueueDequeueSlowdown &lt;number&gt; [number
is timeout in <i> micro</i>seconds (1000000us is 1sec!),
diff --git a/doc/v3compatibility.html b/doc/v3compatibility.html
index b069a440..ee7664f6 100644
--- a/doc/v3compatibility.html
+++ b/doc/v3compatibility.html
@@ -53,23 +53,25 @@ in v2, but was silently ignored. It disappeared some time ago in the
final v1 builds. It can be replaced by applying proper filtering inside
syslog.conf.</p>
<h2>-c option</h2>
-<p>The -c option is new and tell rsyslogd about the desired backward
-compatibility mode. It must always be the first option on the command
-line, as it influences processing of the other options. To use the
-rsyslog v3 native
+<p>The -c option is new and tell rsyslogd about the desired
+backward compatibility mode. It must always be the first option on the
+command line, as it influences processing of the other options. To use
+the rsyslog v3 native
interface, specify -c4. To use compatibility mode&nbsp;,
either do not use -c at all or use -c&lt;vers&gt; where vers is
the
rsyslog version that it shall be compatible to. Use -c0 to be
command-line compatible to sysklogd.</p>
-<h2>-e Option</h2>This option is no longer supported, as the "last
-message repeated n times" feature is now turned off by default. We
-changed this default because this feature is causing a lot of trouble
-and we need to make it either go away or change the way it works. For
-more information, please see our dedicted <a href="http://www.rsyslog.com/PNphpBB2-viewtopic-p-1130.phtml">forum thread on "last message repeated n times"</a>.
-This thread also contains information on how to configure rsyslogd so
-that it continues to support this feature (as long as it is not totally
-removed).<h2>-m Option</h2>
+<h2>-e Option</h2>
+This option is no longer supported, as the "last message repeated n
+times" feature is now turned off by default. We changed this default
+because this feature is causing a lot of trouble and we need to make it
+either go away or change the way it works. For more information, please
+see our dedicted <a href="http://www.rsyslog.com/PNphpBB2-viewtopic-p-1130.phtml">forum
+thread on "last message repeated n times"</a>. This thread also
+contains information on how to configure rsyslogd so that it continues
+to support this feature (as long as it is not totally removed).
+<h2>-m Option</h2>
<p>The -m command line option is emulated in compatibiltiy mode.
To replace it, use the following config directives (compatibility mode
auto-generates them):</p>
@@ -137,7 +139,28 @@ that syncing only happens in some installations where the administrator
actually wanted that (performance-intense) feature. In the fast
majority of cases (if not all), this dramatically increases rsyslogd
performance without any negative effects.
-<h2>Queue Modes for the Main Message Queue</h2>
+<h2>Output File Format</h2>
+<p>Rsyslog supports high precision RFC 3339 timestamps and puts these into
+local log files by default. This is a departure from previous syslogd
+behaviour. We decided to sacrify some backward-compatibility in an
+effort to provide a better logging solution. Rsyslog has been
+supporting the high-precision timestamps for over three years as of
+this writing, but nobody used them because they were not default (one
+may also assume that most people didn't even know about them). Now, we
+are writing the great high-precision time stamps, which greatly aid in
+getting the right sequence of logging events. If you do not like that,
+you can easily turn them off by placing
+</p><p style="font-weight: bold;"><code>$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat</code>
+</p><p>right at the start of your rsyslog.conf. This will use the
+previous format. Please note that the name is case-sensitive and must
+be specificed exactly as shown above. Please also note that you can of
+course use any other format of your liking. To do so, simply specify
+the template to use or set a new default template via the
+$ActionFileDefaultTemplate directive. Keep in mind, though, that
+templates must be defined before they are used.</p><p>Keep in mind that
+when receiving messages from remote hosts, the timestamp is just as
+precise as the remote host provided it. In most cases, this means you
+will only a receive a standard timestamp with second precision.</p><p>Please note that the default forwarding format may also change in the future. </p><h2>Queue Modes for the Main Message Queue</h2>
<p>Either "FixedArray" or "LinkedList" is recommended. "Direct"
is available, but should not be used except for a very good reason
("Direct" disables queueing and will potentially lead to message loss
diff --git a/omfile.c b/omfile.c
index b834cc42..c232118a 100644
--- a/omfile.c
+++ b/omfile.c
@@ -82,6 +82,7 @@ static uid_t dirUID; /* UID to be used for newly created directories */
static uid_t dirGID; /* GID to be used for newly created directories */
static int bCreateDirs; /* auto-create directories for dynaFiles: 0 - no, 1 - yes */
static int bEnableSync = 0;/* enable syncing of files (no dash in front of pathname in conf): 0 - no, 1 - yes */
+static uchar *pszTplName = NULL; /* name of the default template to use */
/* end globals for default values */
typedef struct _instanceData {
@@ -243,7 +244,9 @@ static rsRetVal cflineParseOutchannel(instanceData *pData, uchar* p, omodStringR
*/
pData->f_sizeLimitCmd = (char*) pOch->cmdOnSizeLimit;
- iRet = cflineParseTemplateName(&p, pOMSR, iEntry, iTplOpts, (uchar*) " TradFmt");
+RUNLOG_VAR("%p", pszTplName);
+ iRet = cflineParseTemplateName(&p, pOMSR, iEntry, iTplOpts,
+ (pszTplName == NULL) ? (uchar*)"RSYSLOG_FileFormat" : pszTplName);
finalize_it:
RETiRet;
@@ -696,7 +699,8 @@ CODESTARTparseSelectorAct
*/
CODE_STD_STRING_REQUESTparseSelectorAct(2)
++p; /* eat '?' */
- if((iRet = cflineParseFileName(p, (uchar*) pData->f_fname, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS))
+ if((iRet = cflineParseFileName(p, (uchar*) pData->f_fname, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS,
+ (pszTplName == NULL) ? (uchar*)"RSYSLOG_FileFormat" : pszTplName))
!= RS_RET_OK)
break;
/* "filename" is actually a template name, we need this as string 1. So let's add it
@@ -741,7 +745,8 @@ CODESTARTparseSelectorAct
* to use is specified. So we need to scan for the first coma first
* and then look at the rest of the line.
*/
- if((iRet = cflineParseFileName(p, (uchar*) pData->f_fname, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS))
+ if((iRet = cflineParseFileName(p, (uchar*) pData->f_fname, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS,
+ (pszTplName == NULL) ? (uchar*)"RSYSLOG_FileFormat" : pszTplName))
!= RS_RET_OK)
break;
@@ -797,6 +802,10 @@ static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __a
fDirCreateMode = 0644;
bCreateDirs = 1;
bEnableSync = 0;
+ if(pszTplName != NULL) {
+ free(pszTplName);
+ pszTplName = NULL;
+ }
return RS_RET_OK;
}
@@ -804,6 +813,8 @@ static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __a
BEGINmodExit
CODESTARTmodExit
+ if(pszTplName != NULL)
+ free(pszTplName);
ENDmodExit
@@ -829,6 +840,7 @@ CODEmodInit_QueryRegCFSLineHdlr
CHKiRet(omsdRegCFSLineHdlr((uchar *)"failonchownfailure", 0, eCmdHdlrBinary, NULL, &bFailOnChown, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"actionfileenablesync", 0, eCmdHdlrBinary, NULL, &bEnableSync, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"resetconfigvariables", 1, eCmdHdlrCustomHandler, resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
+ CHKiRet(regCfSysLineHdlr((uchar *)"actionfiledefaulttemplate", 0, eCmdHdlrGetWord, NULL, &pszTplName, NULL));
ENDmodInit
/*
* vi:set ai:
diff --git a/omshell.c b/omshell.c
index 688ee2e4..2176c101 100644
--- a/omshell.c
+++ b/omshell.c
@@ -113,7 +113,8 @@ CODE_STD_STRING_REQUESTparseSelectorAct(1)
case '^': /* bkalkbrenner 2005-09-20: execute shell command */
dbgprintf("exec\n");
++p;
- iRet = cflineParseFileName(p, (uchar*) pData->progName, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS);
+ iRet = cflineParseFileName(p, (uchar*) pData->progName, *ppOMSR, 0, OMSR_NO_RQD_TPL_OPTS,
+ (uchar*)"RSYSLOG_TraditionalFileFormat");
break;
default:
iRet = RS_RET_CONFLINE_UNPROCESSED;
diff --git a/syslogd.c b/syslogd.c
index 2b569f18..228b44e6 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -417,7 +417,8 @@ int option_DisallowWarning = 1; /* complain if message from disallowed sender is
/* hardcoded standard templates (used for defaults) */
-static uchar template_TraditionalFormat[] = "\"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n\"";
+static uchar template_TraditionalFileFormat[] = "\"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n\"";
+static uchar template_FileFormat[] = "\"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n\"";
static uchar template_WallFmt[] = "\"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag%%msg%\n\r\"";
static uchar template_StdFwdFmt[] = "\"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%\"";
static uchar template_StdUsrMsgFmt[] = "\" %syslogtag%%msg%\n\r\"";
@@ -2811,8 +2812,10 @@ static void mainThread()
* we use template names with a SP in front - these
* can NOT be generated via the configuration file
*/
- pTmp = template_TraditionalFormat;
- tplAddLine(" TradFmt", &pTmp);
+ pTmp = template_FileFormat; /* new format for files with high-precision stamp */
+ tplAddLine("RSYSLOG_FileFormat", &pTmp);
+ pTmp = template_TraditionalFileFormat;
+ tplAddLine("RSYSLOG_TraditionalFileFormat", &pTmp);
pTmp = template_WallFmt;
tplAddLine(" WallFmt", &pTmp);
pTmp = template_StdFwdFmt;
diff --git a/syslogd.h b/syslogd.h
index 55a95eab..4eefd325 100644
--- a/syslogd.h
+++ b/syslogd.h
@@ -123,7 +123,7 @@ rsRetVal parseAndSubmitMessage(char *hname, char *msg, int len, int bParseHost,
void untty(void);
rsRetVal selectorConstruct(selector_t **ppThis);
rsRetVal cflineParseTemplateName(uchar** pp, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts, uchar *dfltTplName);
-rsRetVal cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts);
+rsRetVal cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts, uchar *pszTpl);
int getSubString(uchar **ppSrc, char *pDst, size_t DstSize, char cSep);
rsRetVal selectorDestruct(void *pVal);
rsRetVal selectorAddList(selector_t *f);