summaryrefslogtreecommitdiffstats
path: root/syslogd.c
diff options
context:
space:
mode:
Diffstat (limited to 'syslogd.c')
-rw-r--r--syslogd.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/syslogd.c b/syslogd.c
index 1c31fb61..8c71f57d 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -2828,11 +2828,15 @@ static rsRetVal
InitGlobalClasses(void)
{
DEFiRet;
+ char *pErrObj; /* tells us which object failed if that happens (useful for troubleshooting!) */
+ pErrObj = "obj";
CHKiRet(objClassInit(NULL)); /* *THIS* *MUST* always be the first class initilizer being called! */
CHKiRet(objGetObjInterface(&obj)); /* this provides the root pointer for all other queries */
/* the following classes were intialized by objClassInit() */
+ pErrObj = "errmsg";
CHKiRet(objUse(errmsg, CORE_COMPONENT));
+ pErrObj = "module";
CHKiRet(objUse(module, CORE_COMPONENT));
/* initialize and use classes. We must be very careful with the order of events. Some
@@ -2843,35 +2847,61 @@ InitGlobalClasses(void)
* class immediately after it is initialized. And, of course, we load those classes
* first that we use ourselfs... -- rgerhards, 2008-03-07
*/
+ pErrObj = "datetime";
CHKiRet(datetimeClassInit(NULL));
CHKiRet(objUse(datetime, CORE_COMPONENT));
+ pErrObj = "msg";
CHKiRet(msgClassInit(NULL));
+ pErrObj = "str,";
CHKiRet(strmClassInit(NULL));
+ pErrObj = "wti";
CHKiRet(wtiClassInit(NULL));
+ pErrObj = "wtp";
CHKiRet(wtpClassInit(NULL));
+ pErrObj = "queue";
CHKiRet(queueClassInit(NULL));
+ pErrObj = "vmstk";
CHKiRet(vmstkClassInit(NULL));
+ pErrObj = "sysvar";
CHKiRet(sysvarClassInit(NULL));
+ pErrObj = "vm";
CHKiRet(vmClassInit(NULL));
CHKiRet(objUse(vm, CORE_COMPONENT));
+ pErrObj = "vmop";
CHKiRet(vmopClassInit(NULL));
+ pErrObj = "vmprg";
CHKiRet(vmprgClassInit(NULL));
+ pErrObj = "ctok_token";
CHKiRet(ctok_tokenClassInit(NULL));
+ pErrObj = "ctok";
CHKiRet(ctokClassInit(NULL));
+ pErrObj = "expr";
CHKiRet(exprClassInit(NULL));
CHKiRet(objUse(expr, CORE_COMPONENT));
+ pErrObj = "conf";
CHKiRet(confClassInit(NULL));
CHKiRet(objUse(conf, CORE_COMPONENT));
/* dummy "classes" */
+ pErrObj = "action";
CHKiRet(actionClassInit());
+ pErrObj = "template";
CHKiRet(templateInit());
+ pErrObj = "str";
CHKiRet(strInit());
/* TODO: the dependency on net shall go away! -- rgerhards, 2008-03-07 */
+ pErrObj = "net";
CHKiRet(objUse(net, LM_NET_FILENAME));
finalize_it:
+ if(iRet != RS_RET_OK) {
+ /* we know we are inside the init sequence, so we can safely emit
+ * messages to stderr. -- rgerhards, 2008-04-02
+ */
+ fprintf(stderr, "Error during class init for object '%s' - failing...\n", pErrObj);
+ }
+
RETiRet;
}
@@ -2957,7 +2987,14 @@ int realMain(int argc, char **argv)
int bImUxSockLoaded = 0; /* already generated a $ModLoad imuxsock? */
uchar legacyConfLine[80];
- CHKiRet(InitGlobalClasses());
+
+ CHKiRet_Hdlr(InitGlobalClasses()) {
+ fprintf(stderr, "rsyslogd initializiation failed - global classes could not be initialized.\n"
+ "Did you do a \"make install\"?\n"
+ "Suggested action: run rsyslogd with -d -n options to see what exactly "
+ "fails.\n");
+ FINALIZE;
+ }
/* doing some core initializations */
if((iRet = modInitIminternal()) != RS_RET_OK) {
@@ -3298,7 +3335,8 @@ int realMain(int argc, char **argv)
finalize_it:
if(iRet != RS_RET_OK)
- fprintf(stderr, "rsyslogd run failed with error %d.\n", iRet);
+ fprintf(stderr, "rsyslogd run failed with error %d\n(see rsyslog.h "
+ "or http://www.rsyslog.com/errcode to learn what that number means)\n", iRet);
ENDfunc
return 0;