Index: /trunk/include/VBox/com/com.h
===================================================================
--- /trunk/include/VBox/com/com.h	(revision 41039)
+++ /trunk/include/VBox/com/com.h	(revision 41040)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2007 Oracle Corporation
+ * Copyright (C) 2005-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -78,5 +78,29 @@
  *  @return         VBox status code.
  */
-int GetVBoxUserHomeDirectory (char *aDir, size_t aDirLen);
+int GetVBoxUserHomeDirectory(char *aDir, size_t aDirLen);
+
+/**
+ *  Creates a release log file, used both in VBoxSVC and in API clients.
+ *
+ *  @param pcszEntity       Human readable name of the program.
+ *  @param pcszLogFile      Name of the release log file.
+ *  @param fFlags           Logger instance flags.
+ *  @param pcszGroupSettings Group logging settings.
+ *  @param pcszEnvVarBase   Base environment variable name for the logger.
+ *  @param fDestFlags       Logger destination flags.
+ *  @param cMaxEntriesPerGroup Limit for log entries per group. UINT32_MAX for no limit.
+ *  @param cHistory         Number of old log files to keep.
+ *  @param uHistoryFileTime Maximum amount of time to put in a log file.
+ *  @param uHistoryFileSize Maximum size of a log file before rotating.
+ *  @param pszError         In case of creation failure: buffer for error message.
+ *  @param cbError          Size of error message buffer.
+ *  @return         VBox status code.
+ */
+int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
+                     uint32_t fFlags, const char *pcszGroupSettings,
+                     const char *pcszEnvVarBase, uint32_t fDestFlags,
+                     uint32_t cMaxEntriesPerGroup, uint32_t cHistory,
+                     uint32_t uHistoryFileTime, uint64_t uHistoryFileSize,
+                     char *pszError, size_t cbError);
 
 } /* namespace com */
Index: /trunk/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp	(revision 41039)
+++ /trunk/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp	(revision 41040)
@@ -784,72 +784,4 @@
 }
 
-static void logHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
-{
-    /* Some introductory information. */
-    static RTTIMESPEC s_TimeSpec;
-    char szTmp[256];
-    if (enmPhase == RTLOGPHASE_BEGIN)
-        RTTimeNow(&s_TimeSpec);
-    RTTimeSpecToString(&s_TimeSpec, szTmp, sizeof(szTmp));
-
-    switch (enmPhase)
-    {
-        case RTLOGPHASE_BEGIN:
-        {
-            pfnLog(pLoggerRelease,
-                   "VirtualBox Watchdog %s r%u %s (%s %s) release log\n"
-#ifdef VBOX_BLEEDING_EDGE
-                   "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
-#endif
-                   "Log opened %s\n",
-                   VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET,
-                   __DATE__, __TIME__, szTmp);
-
-            int vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Product: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Release: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Version: %s\n", szTmp);
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Service Pack: %s\n", szTmp);
-
-            /* the package type is interesting for Linux distributions */
-            char szExecName[RTPATH_MAX];
-            char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
-            pfnLog(pLoggerRelease,
-                   "Executable: %s\n"
-                   "Process ID: %u\n"
-                   "Package type: %s"
-#ifdef VBOX_OSE
-                   " (OSE)"
-#endif
-                   "\n",
-                   pszExecName ? pszExecName : "unknown",
-                   RTProcSelf(),
-                   VBOX_PACKAGE_STRING);
-            break;
-        }
-
-        case RTLOGPHASE_PREROTATE:
-            pfnLog(pLoggerRelease, "Log rotated - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_POSTROTATE:
-            pfnLog(pLoggerRelease, "Log continuation - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_END:
-            pfnLog(pLoggerRelease, "End of log file - Log started %s\n", szTmp);
-            break;
-
-        default:
-            /* nothing */;
-    }
-}
-
 static void displayHeader()
 {
@@ -1112,25 +1044,13 @@
     displayHeader();
 
-    /* create release logger */
-    PRTLOGGER pLoggerRelease;
-    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
-    RTUINT fFlags = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-    fFlags |= RTLOGFLAGS_USECRLF;
-#endif
-    char szError[RTPATH_MAX + 128] = "";
-    rc = RTLogCreateEx(&pLoggerRelease, fFlags, "all",
-                       "VBOXBALLOONCTRL_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, RTLOGDEST_STDOUT,
-                       logHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                       szError, sizeof(szError), pszLogFile);
-    if (RT_SUCCESS(rc))
-    {
-        /* register this logger as the release logger */
-        RTLogRelSetDefaultInstance(pLoggerRelease);
-
-        /* Explicitly flush the log in case of VBOXWEBSRV_RELEASE_LOG=buffered. */
-        RTLogFlush(pLoggerRelease);
-    }
-    else
+    /* create release logger, to stdout */
+    char szError[RTPATH_MAX + 128];
+    rc = com::VBoxLogRelCreate("Watchdog", g_fDaemonize ? NULL : pszLogFile,
+                               RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                               "all", "VBOXBALLOONCTRL_RELEASE_LOG",
+                               RTLOGDEST_STDOUT, UINT32_MAX /* cMaxEntriesPerGroup */,
+                               g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
+                               szError, sizeof(szError));
+    if (RT_FAILURE(rc))
         return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
 
@@ -1141,10 +1061,14 @@
         char szLogFile[RTPATH_MAX];
 
-        rc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
-        if (RT_FAILURE(rc))
-             return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not get base directory for logging: %Rrc", rc);
-        rc = RTPathAppend(szLogFile, sizeof(szLogFile), "vboxballoonctrl.log");
-        if (RT_FAILURE(rc))
-             return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not construct logging path: %Rrc", rc);
+        if (!pszLogFile || !*pszLogFile)
+        {
+            rc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
+            if (RT_FAILURE(rc))
+                 return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not get base directory for logging: %Rrc", rc);
+            rc = RTPathAppend(szLogFile, sizeof(szLogFile), "vboxballoonctrl.log");
+            if (RT_FAILURE(rc))
+                 return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not construct logging path: %Rrc", rc);
+            pszLogFile = szLogFile;
+        }
 
         rc = RTProcDaemonizeUsingFork(false /* fNoChDir */, false /* fNoClose */, pszPidFile);
@@ -1152,26 +1076,13 @@
             return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to daemonize, rc=%Rrc. exiting.", rc);
 
-        /* create release logger */
-        PRTLOGGER pLoggerReleaseFile;
-        static const char * const s_apszGroupsFile[] = VBOX_LOGGROUP_NAMES;
-        RTUINT fFlagsFile = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-        fFlagsFile |= RTLOGFLAGS_USECRLF;
-#endif
-        char szErrorFile[RTPATH_MAX + 128] = "";
-        int vrc = RTLogCreateEx(&pLoggerReleaseFile, fFlagsFile, "all",
-                                "VBOXBALLOONCTRL_RELEASE_LOG", RT_ELEMENTS(s_apszGroupsFile), s_apszGroupsFile, RTLOGDEST_FILE,
-                                logHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                                szErrorFile, sizeof(szErrorFile), szLogFile);
-        if (RT_SUCCESS(vrc))
-        {
-            /* register this logger as the release logger */
-            RTLogRelSetDefaultInstance(pLoggerReleaseFile);
-
-            /* Explicitly flush the log in case of VBOXBALLOONCTRL_RELEASE_LOG=buffered. */
-            RTLogFlush(pLoggerReleaseFile);
-        }
-        else
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szErrorFile, vrc);
+        /* create release logger, to file */
+        rc = com::VBoxLogRelCreate("Watchdog", pszLogFile,
+                                   RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                                   "all", "VBOXBALLOONCTRL_RELEASE_LOG",
+                                   RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
+                                   g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
+                                   szError, sizeof(szError));
+        if (RT_FAILURE(rc))
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
     }
 #endif
Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 41039)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 41040)
@@ -5,5 +5,5 @@
 
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+# Copyright (C) 2004-2012 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -103,7 +103,7 @@
  OTHERS         += $(VBOX_IDL_FILE.XPCOM) $(VBOX_IDL_TYPELIB.XPCOM) $(VBOX_IDL_HEADER.XPCOM)
  OTHER_CLEAN    += \
-    $(VBOX_IDL_FILE.XPCOM) \
-    $(VBOX_IDL_HEADER.XPCOM) \
-    $(VBOX_IDL_TYPELIB.XPCOM)
+	$(VBOX_IDL_FILE.XPCOM) \
+	$(VBOX_IDL_HEADER.XPCOM) \
+	$(VBOX_IDL_TYPELIB.XPCOM)
 
  VBOX_MAIN_PREREQS += $(VBOX_IDL_TYPELIB.XPCOM) $(VBOX_IDL_HEADER.XPCOM)
@@ -175,7 +175,7 @@
 VBox-python-glue_SOURCES = \
 	glue/vboxapi.py=>__init__.py \
-        $(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
+	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
 VBox-python-glue_CLEAN = \
-        $(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
+	$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py
 
 $$(VBox-python-glue_0_OUTDIR)/VirtualBox_constants.py:  \
@@ -275,6 +275,6 @@
 	devinfo \
 	socket \
-        $(LIB_VMM)
-        
+	$(LIB_VMM)
+
 VBoxSVC_INTERMEDIATES = \
 	$(VBOX_MAIN_PREREQS) \
@@ -310,5 +310,4 @@
 	src-server/HostNetworkInterfaceImpl.cpp \
 	src-server/HostPower.cpp \
-	src-server/Logging.cpp \
 	src-server/MachineImpl.cpp \
 	src-server/MachineImplCloneVM.cpp \
@@ -345,5 +344,5 @@
 	src-server/win/HostPowerWin.cpp \
 	src-server/win/VBoxSVC.rc \
-        src-server/win/VBoxComEvents.cpp
+	src-server/win/VBoxComEvents.cpp
 
 VBoxSVC_SOURCES.linux = \
@@ -356,8 +355,4 @@
 VBoxSVC_SOURCES.freebsd = \
 	src-server/freebsd/HostHardwareFreeBSD.cpp
-
-src-server/Logging.cpp_DEFS = \
-	VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \
-	$(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",)
 
 
@@ -579,9 +574,9 @@
 ifdef VBOX_WITH_NETFLT
  VBoxC_LIBS.win += \
- 	$(PATH_STAGE_LIB)/VBoxDrvCfg$(VBOX_SUFF_LIB) \
- 	$(PATH_SDK_W2K3DDK_LIB)/Newdev.lib \
- 	$(PATH_STAGE_LIB)/WinNetConfig$(VBOX_SUFF_LIB) \
- 	$(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
- 	$(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib
+	$(PATH_STAGE_LIB)/VBoxDrvCfg$(VBOX_SUFF_LIB) \
+	$(PATH_SDK_W2K3DDK_LIB)/Newdev.lib \
+	$(PATH_STAGE_LIB)/WinNetConfig$(VBOX_SUFF_LIB) \
+	$(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
+	$(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib
 endif
 
@@ -688,5 +683,4 @@
 
 src-client/ConsoleImpl.cpp_DEFS = \
-	VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \
 	$(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",)
 
@@ -726,4 +720,7 @@
 endif # !win
 
+glue/com.cpp_DEFS = \
+	$(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",)
+
 
 #
@@ -739,5 +736,5 @@
 	src-all/ExtPackUtil.cpp
  VBoxExtPackHelperApp_LIBS = \
-        $(LIB_RUNTIME)
+	$(LIB_RUNTIME)
 endif # VBOX_WITH_EXTPACK
 
Index: /trunk/src/VBox/Main/glue/com.cpp
===================================================================
--- /trunk/src/VBox/Main/glue/com.cpp	(revision 41039)
+++ /trunk/src/VBox/Main/glue/com.cpp	(revision 41040)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2007 Oracle Corporation
+ * Copyright (C) 2005-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -41,4 +41,7 @@
 #include "VBox/com/array.h"
 
+#include <package-generated.h>
+
+#include <iprt/buildconfig.h>
 #include <iprt/param.h>
 #include <iprt/path.h>
@@ -46,6 +49,9 @@
 #include <iprt/env.h>
 #include <iprt/string.h>
+#include <iprt/system.h>
+#include <iprt/process.h>
 
 #include <VBox/err.h>
+#include <VBox/version.h>
 
 #ifdef RT_OS_DARWIN
@@ -212,4 +218,126 @@
 }
 
+static const char *g_pszLogEntity = NULL;
+
+static void vboxHeaderFooter(PRTLOGGER pReleaseLogger, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
+{
+    /* some introductory information */
+    static RTTIMESPEC s_TimeSpec;
+    char szTmp[256];
+    if (enmPhase == RTLOGPHASE_BEGIN)
+        RTTimeNow(&s_TimeSpec);
+    RTTimeSpecToString(&s_TimeSpec, szTmp, sizeof(szTmp));
+
+    switch (enmPhase)
+    {
+        case RTLOGPHASE_BEGIN:
+        {
+            bool fOldBuffered = RTLogSetBuffering(pReleaseLogger, true /*fBuffered*/);
+            pfnLog(pReleaseLogger,
+                   "VirtualBox %s %s r%u %s (%s %s) release log\n"
+#ifdef VBOX_BLEEDING_EDGE
+                   "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
+#endif
+                   "Log opened %s\n",
+                   g_pszLogEntity, VBOX_VERSION_STRING, RTBldCfgRevision(),
+                   RTBldCfgTargetDotArch(), __DATE__, __TIME__, szTmp);
+
+            int vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "OS Product: %s\n", szTmp);
+            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "OS Release: %s\n", szTmp);
+            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "OS Version: %s\n", szTmp);
+            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "OS Service Pack: %s\n", szTmp);
+
+            vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_NAME, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "DMI Product Name: %s\n", szTmp);
+            vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_VERSION, szTmp, sizeof(szTmp));
+            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+                pfnLog(pReleaseLogger, "DMI Product Version: %s\n", szTmp);
+
+            uint64_t cbHostRam = 0, cbHostRamAvail = 0;
+            vrc = RTSystemQueryTotalRam(&cbHostRam);
+            if (RT_SUCCESS(vrc))
+                vrc = RTSystemQueryAvailableRam(&cbHostRamAvail);
+            if (RT_SUCCESS(vrc))
+                pfnLog(pReleaseLogger, "Host RAM: %lluMB RAM, available: %lluMB\n",
+                       cbHostRam / _1M, cbHostRamAvail / _1M);
+
+            /* the package type is interesting for Linux distributions */
+            char szExecName[RTPATH_MAX];
+            char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
+            pfnLog(pReleaseLogger,
+                   "Executable: %s\n"
+                   "Process ID: %u\n"
+                   "Package type: %s"
+#ifdef VBOX_OSE
+                   " (OSE)"
+#endif
+                   "\n",
+                   pszExecName ? pszExecName : "unknown",
+                   RTProcSelf(),
+                   VBOX_PACKAGE_STRING);
+            RTLogSetBuffering(pReleaseLogger, fOldBuffered);
+            break;
+        }
+        case RTLOGPHASE_PREROTATE:
+            pfnLog(pReleaseLogger, "Log rotated - Log started %s\n", szTmp);
+            break;
+
+        case RTLOGPHASE_POSTROTATE:
+            pfnLog(pReleaseLogger, "Log continuation - Log started %s\n", szTmp);
+            break;
+
+        case RTLOGPHASE_END:
+            pfnLog(pReleaseLogger, "End of log file - Log started %s\n", szTmp);
+            break;
+
+        default:
+            /* nothing */;
+    }
+}
+
+int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
+                     uint32_t fFlags, const char *pcszGroupSettings,
+                     const char *pcszEnvVarBase, uint32_t fDestFlags,
+                     uint32_t cMaxEntriesPerGroup, uint32_t cHistory,
+                     uint32_t uHistoryFileTime, uint64_t uHistoryFileSize,
+                     char *pszError, size_t cbError)
+{
+    Assert(cbError >= RTPATH_MAX + 128);
+
+    /* create release logger */
+    PRTLOGGER pReleaseLogger;
+    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
+#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+    fFlags |= RTLOGFLAGS_USECRLF;
+#endif
+    g_pszLogEntity = pcszEntity;
+    int vrc = RTLogCreateEx(&pReleaseLogger, fFlags, "all all.restrict default.unrestricted",
+                            pcszEnvVarBase, RT_ELEMENTS(s_apszGroups), s_apszGroups, fDestFlags,
+                            vboxHeaderFooter, cHistory, uHistoryFileSize, uHistoryFileTime,
+                            pszError, cbError, pcszLogFile);
+    if (RT_SUCCESS(vrc))
+    {
+        /* make sure that we don't flood logfiles */
+        RTLogSetGroupLimit(pReleaseLogger, cMaxEntriesPerGroup);
+
+        /* explicitly flush the log, to have some info when buffering */
+        RTLogFlush(pReleaseLogger);
+
+        /* register this logger as the release logger */
+        RTLogRelSetDefaultInstance(pReleaseLogger);
+    }
+    return vrc;
+}
+
+
 /* static */
 const Guid Guid::Empty; /* default ctor is OK */
Index: /trunk/src/VBox/Main/include/Logging.h
===================================================================
--- /trunk/src/VBox/Main/include/Logging.h	(revision 41039)
+++ /trunk/src/VBox/Main/include/Logging.h	(revision 41040)
@@ -7,5 +7,5 @@
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2004-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -44,7 +44,4 @@
 #include <VBox/log.h>
 
-int VBoxSVCLogRelCreate(const char *pszLogFile, uint32_t cHistory,
-                        uint32_t uHistoryFileTime, uint64_t uHistoryFileSize);
-
 #endif // ____H_LOGGING
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 41039)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 41040)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2005-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -63,5 +63,4 @@
 #include "ConsoleVRDPServer.h"
 #include "VMMDev.h"
-#include "package-generated.h"
 #ifdef VBOX_WITH_EXTPACK
 # include "ExtPackManagerImpl.h"
@@ -105,5 +104,4 @@
 #include <VBox/param.h>
 #include <VBox/vusb.h>
-#include <VBox/version.h>
 
 #include <VBox/VMMDev.h>
@@ -6067,5 +6065,6 @@
     Bstr logFolder;
     hrc = aMachine->COMGETTER(LogFolder)(logFolder.asOutParam());
-    if (FAILED(hrc)) return hrc;
+    if (FAILED(hrc))
+        return hrc;
 
     Utf8Str logDir = logFolder;
@@ -6116,88 +6115,15 @@
     }
 
-    static const char * const   s_apszGroups[] = VBOX_LOGGROUP_NAMES;
-    char                        szError[RTPATH_MAX + 128] = "";
-    PRTLOGGER                   pReleaseLogger;
-    uint32_t                    fFlags = RTLOGFLAGS_PREFIX_TIME_PROG | RTLOGFLAGS_RESTRICT_GROUPS;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-    fFlags |= RTLOGFLAGS_USECRLF;
-#endif
-    int vrc = RTLogCreateEx(&pReleaseLogger, fFlags, "all all.restrict default.unrestricted",
-                            "VBOX_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, RTLOGDEST_FILE,
-                            NULL /* pfnBeginEnd */, 0 /* cHistory */, 0 /* cbHistoryFileMax */, 0 /* uHistoryTimeMax */,
-                            szError, sizeof(szError), logFile.c_str());
-    if (RT_SUCCESS(vrc))
-    {
-        RTLogSetGroupLimit(pReleaseLogger, 32768);
-        bool fOldBuffered = RTLogRelSetBuffering(true /*fBuffered*/);
-
-        /* some introductory information */
-        RTTIMESPEC timeSpec;
-        char szTmp[256];
-        RTTimeSpecToString(RTTimeNow(&timeSpec), szTmp, sizeof(szTmp));
-        RTLogRelLogger(pReleaseLogger, 0, ~0U,
-                       "VirtualBox %s r%u %s (%s %s) release log\n"
-#ifdef VBOX_BLEEDING_EDGE
-                       "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
-#endif
-                       "Log opened %s\n",
-                       VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET,
-                       __DATE__, __TIME__, szTmp);
-
-        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "OS Product: %s\n", szTmp);
-        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "OS Release: %s\n", szTmp);
-        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "OS Version: %s\n", szTmp);
-        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "OS Service Pack: %s\n", szTmp);
-        vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_NAME, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "DMI Product Name: %s\n", szTmp);
-        vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_VERSION, szTmp, sizeof(szTmp));
-        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-            RTLogRelLogger(pReleaseLogger, 0, ~0U, "DMI Product Version: %s\n", szTmp);
-
-        ComPtr<IHost> pHost;
-        pVirtualBox->COMGETTER(Host)(pHost.asOutParam());
-        ULONG cMbHostRam = 0;
-        ULONG cMbHostRamAvail = 0;
-        pHost->COMGETTER(MemorySize)(&cMbHostRam);
-        pHost->COMGETTER(MemoryAvailable)(&cMbHostRamAvail);
-        RTLogRelLogger(pReleaseLogger, 0, ~0U, "Host RAM: %uMB RAM, available: %uMB\n",
-                       cMbHostRam, cMbHostRamAvail);
-
-        /* the package type is interesting for Linux distributions */
-        char szExecName[RTPATH_MAX];
-        char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
-        RTLogRelLogger(pReleaseLogger, 0, ~0U,
-                       "Executable: %s\n"
-                       "Process ID: %u\n"
-                       "Package type: %s"
-#ifdef VBOX_OSE
-                       " (OSE)"
-#endif
-                       "\n",
-                       pszExecName ? pszExecName : "unknown",
-                       RTProcSelf(),
-                       VBOX_PACKAGE_STRING);
-
-        /* register this logger as the release logger */
-        RTLogRelSetDefaultInstance(pReleaseLogger);
-        hrc = S_OK;
-
-        /* Restore the buffering setting and xplicitly flush the log. */
-        RTLogRelSetBuffering(fOldBuffered);
-        RTLogFlush(pReleaseLogger);
-    }
-    else
-        hrc = setError(E_FAIL,
-            tr("Failed to open release log (%s, %Rrc)"),
-            szError, vrc);
+    char szError[RTPATH_MAX + 128];
+    int vrc = com::VBoxLogRelCreate("VM", logFile.c_str(),
+                                    RTLOGFLAGS_PREFIX_TIME_PROG | RTLOGFLAGS_RESTRICT_GROUPS,
+                                    "all all.restrict default.unrestricted",
+                                    "VBOX_RELEASE_LOG", RTLOGDEST_FILE,
+                                    32768 /* cMaxEntriesPerGroup */,
+                                    0 /* cHistory */, 0 /* uHistoryFileTime */,
+                                    0 /* uHistoryFileSize */, szError, sizeof(szError));
+    if (RT_FAILURE(vrc))
+        hrc = setError(E_FAIL, tr("Failed to open release log (%s, %Rrc)"),
+                       szError, vrc);
 
     /* If we've made any directory changes, flush the directory to increase
@@ -8571,5 +8497,5 @@
     static char saBuildID[40];
     RTStrPrintf(saBuildID, sizeof(saBuildID), "%s%s%s%s VirtualBox %s r%u %s%s%s%s",
-                "BU", "IL", "DI", "D", VBOX_VERSION_STRING, RTBldCfgRevision(), "BU", "IL", "DI", "D");
+                "BU", "IL", "DI", "D", RTBldCfgVersion(), RTBldCfgRevision(), "BU", "IL", "DI", "D");
 
     ComObjPtr<Console> pConsole = task->mConsole;
Index: unk/src/VBox/Main/src-server/Logging.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/Logging.cpp	(revision 41039)
+++ 	(revision )
@@ -1,133 +1,0 @@
-/* $Id$ */
-
-/** @file
- *
- * Logging in VBoxSVC.
- */
-
-/*
- * Copyright (C) 2011 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#include "Logging.h"
-
-#include <package-generated.h>
-
-#include <iprt/buildconfig.h>
-#include <iprt/err.h>
-#include <iprt/message.h>
-#include <iprt/path.h>
-#include <iprt/system.h>
-#include <iprt/process.h>
-#include <VBox/version.h>
-#include <VBox/log.h>
-
-
-static void vboxsvcHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
-{
-    /* some introductory information */
-    static RTTIMESPEC s_TimeSpec;
-    char szTmp[256];
-    if (enmPhase == RTLOGPHASE_BEGIN)
-        RTTimeNow(&s_TimeSpec);
-    RTTimeSpecToString(&s_TimeSpec, szTmp, sizeof(szTmp));
-
-    switch (enmPhase)
-    {
-        case RTLOGPHASE_BEGIN:
-        {
-            pfnLog(pLoggerRelease,
-                   "VirtualBox (XP)COM Server %s r%u %s (%s %s) release log\n"
-#ifdef VBOX_BLEEDING_EDGE
-                   "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
-#endif
-                   "Log opened %s\n",
-                   VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET,
-                   __DATE__, __TIME__, szTmp);
-
-            int vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Product: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Release: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Version: %s\n", szTmp);
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Service Pack: %s\n", szTmp);
-
-            /* the package type is interesting for Linux distributions */
-            char szExecName[RTPATH_MAX];
-            char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
-            pfnLog(pLoggerRelease,
-                   "Executable: %s\n"
-                   "Process ID: %u\n"
-                   "Package type: %s"
-#ifdef VBOX_OSE
-                   " (OSE)"
-#endif
-                   "\n",
-                   pszExecName ? pszExecName : "unknown",
-                   RTProcSelf(),
-                   VBOX_PACKAGE_STRING);
-            break;
-        }
-
-        case RTLOGPHASE_PREROTATE:
-            pfnLog(pLoggerRelease, "Log rotated - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_POSTROTATE:
-            pfnLog(pLoggerRelease, "Log continuation - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_END:
-            pfnLog(pLoggerRelease, "End of log file - Log started %s\n", szTmp);
-            break;
-
-        default:
-            /* nothing */;
-    }
-}
-
-int VBoxSVCLogRelCreate(const char *pszLogFile, uint32_t cHistory,
-                        uint32_t uHistoryFileTime, uint64_t uHistoryFileSize)
-{
-    /* create release logger */
-    PRTLOGGER pLoggerReleaseFile;
-    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
-    RTUINT fFlags = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-    fFlags |= RTLOGFLAGS_USECRLF;
-#endif
-    char szError[RTPATH_MAX + 128] = "";
-    int vrc = RTLogCreateEx(&pLoggerReleaseFile, fFlags, "all",
-                            "VBOXSVC_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, 0 /* fDestFlags */,
-                            vboxsvcHeaderFooter, cHistory, uHistoryFileSize, uHistoryFileTime,
-                            szError, sizeof(szError), pszLogFile);
-    if (RT_SUCCESS(vrc))
-    {
-        /* register this logger as the release logger */
-        RTLogRelSetDefaultInstance(pLoggerReleaseFile);
-
-        /* Explicitly flush the log in case of VBOXWEBSRV_RELEASE_LOG=buffered. */
-        RTLogFlush(pLoggerReleaseFile);
-    }
-    else
-    {
-        /* print a message, but do not fail */
-        RTMsgError("failed to open release log (%s, %Rrc)", szError, vrc);
-    }
-    return vrc;
-}
-
-/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Index: /trunk/src/VBox/Main/src-server/win/svcmain.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/win/svcmain.cpp	(revision 41039)
+++ /trunk/src/VBox/Main/src-server/win/svcmain.cpp	(revision 41040)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2004-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -336,5 +336,12 @@
                 pszLogFile = RTStrDup(szLogFile);
         }
-        VBoxSVCLogRelCreate(pszLogFile, cHistory, uHistoryFileTime, uHistoryFileSize);
+        vrc = com::VBoxLogRelCreate("COM Server", pszLogFile,
+                                    RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                                    "all", "VBOXSVC_RELEASE_LOG",
+                                    RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
+                                    cHistory, uHistoryFileTime, uHistoryFileSize,
+                                    szError, sizeof(szError));
+        if (RT_FAILURE(vrc))
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc);
     }
 
Index: /trunk/src/VBox/Main/src-server/xpcom/server.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/xpcom/server.cpp	(revision 41039)
+++ /trunk/src/VBox/Main/src-server/xpcom/server.cpp	(revision 41040)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2004-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -36,5 +36,4 @@
 
 #include <VBox/param.h>
-#include <VBox/version.h>
 
 #include <iprt/buildconfig.h>
@@ -892,5 +891,13 @@
             pszLogFile = RTStrDup(szLogFile);
     }
-    VBoxSVCLogRelCreate(pszLogFile, cHistory, uHistoryFileTime, uHistoryFileSize);
+    char szError[RTPATH_MAX + 128];
+    vrc = com::VBoxLogRelCreate("XPCOM Server", pszLogFile,
+                                RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                                "all", "VBOXSVC_RELEASE_LOG",
+                                RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
+                                cHistory, uHistoryFileTime, uHistoryFileSize,
+                                szError, sizeof(szError));
+    if (RT_FAILURE(vrc))
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc);
 
     daemon_pipe_wr = PR_GetInheritedFD(VBOXSVC_STARTUP_PIPE_NAME);
@@ -1001,5 +1008,5 @@
                 putchar('*');
             RTPrintf("\n%s\n", szBuf);
-            RTPrintf("(C) 2008-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
+            RTPrintf("(C) 2004-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
                      "All rights reserved.\n");
 #ifdef DEBUG
Index: /trunk/src/VBox/Main/webservice/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/webservice/Makefile.kmk	(revision 41039)
+++ /trunk/src/VBox/Main/webservice/Makefile.kmk	(revision 41040)
@@ -7,5 +7,5 @@
 
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+# Copyright (C) 2007-2012 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -318,5 +318,4 @@
 
  vboxweb.cpp_DEFS = \
-	VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \
 	$(if $(VBOX_BLEEDING_EDGE),VBOX_BLEEDING_EDGE=\"$(VBOX_BLEEDING_EDGE)\",)
 
Index: /trunk/src/VBox/Main/webservice/vboxweb.cpp
===================================================================
--- /trunk/src/VBox/Main/webservice/vboxweb.cpp	(revision 41039)
+++ /trunk/src/VBox/Main/webservice/vboxweb.cpp	(revision 41040)
@@ -6,5 +6,5 @@
  *      server, to which clients can connect.
  *
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2007-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -31,6 +31,4 @@
 #include <VBox/version.h>
 #include <VBox/log.h>
-
-#include <package-generated.h>
 
 #include <iprt/buildconfig.h>
@@ -721,72 +719,4 @@
 }
 
-static void WebLogHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
-{
-    /* some introductory information */
-    static RTTIMESPEC s_TimeSpec;
-    char szTmp[256];
-    if (enmPhase == RTLOGPHASE_BEGIN)
-        RTTimeNow(&s_TimeSpec);
-    RTTimeSpecToString(&s_TimeSpec, szTmp, sizeof(szTmp));
-
-    switch (enmPhase)
-    {
-        case RTLOGPHASE_BEGIN:
-        {
-            pfnLog(pLoggerRelease,
-                   "VirtualBox web service %s r%u %s (%s %s) release log\n"
-#ifdef VBOX_BLEEDING_EDGE
-                   "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
-#endif
-                   "Log opened %s\n",
-                   VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET,
-                   __DATE__, __TIME__, szTmp);
-
-            int vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Product: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Release: %s\n", szTmp);
-            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Version: %s\n", szTmp);
-            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
-                pfnLog(pLoggerRelease, "OS Service Pack: %s\n", szTmp);
-
-            /* the package type is interesting for Linux distributions */
-            char szExecName[RTPATH_MAX];
-            char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
-            pfnLog(pLoggerRelease,
-                   "Executable: %s\n"
-                   "Process ID: %u\n"
-                   "Package type: %s"
-#ifdef VBOX_OSE
-                   " (OSE)"
-#endif
-                   "\n",
-                   pszExecName ? pszExecName : "unknown",
-                   RTProcSelf(),
-                   VBOX_PACKAGE_STRING);
-            break;
-        }
-
-        case RTLOGPHASE_PREROTATE:
-            pfnLog(pLoggerRelease, "Log rotated - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_POSTROTATE:
-            pfnLog(pLoggerRelease, "Log continuation - Log started %s\n", szTmp);
-            break;
-
-        case RTLOGPHASE_END:
-            pfnLog(pLoggerRelease, "End of log file - Log started %s\n", szTmp);
-            break;
-
-        default:
-            /* nothing */;
-    }
-}
-
 #ifdef WITH_OPENSSL
 /****************************************************************************
@@ -1020,6 +950,6 @@
     g_mapThreads[RTThreadSelf()] = "[M  ]";
 
-    RTStrmPrintf(g_pStdErr, VBOX_PRODUCT " web service version " VBOX_VERSION_STRING "\n"
-                            "(C) 2005-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
+    RTStrmPrintf(g_pStdErr, VBOX_PRODUCT " web service Version " VBOX_VERSION_STRING "\n"
+                            "(C) 2007-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
                             "All rights reserved.\n");
 
@@ -1163,26 +1093,14 @@
     }
 
-    /* create release logger */
-    PRTLOGGER pLoggerRelease;
-    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
-    RTUINT fFlags = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-    fFlags |= RTLOGFLAGS_USECRLF;
-#endif
-    char szError[RTPATH_MAX + 128] = "";
-    int vrc = RTLogCreateEx(&pLoggerRelease, fFlags, "all",
-                            "VBOXWEBSRV_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, RTLOGDEST_STDOUT,
-                            WebLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                            szError, sizeof(szError), pszLogFile);
-    if (RT_SUCCESS(vrc))
-    {
-        /* register this logger as the release logger */
-        RTLogRelSetDefaultInstance(pLoggerRelease);
-
-        /* Explicitly flush the log in case of VBOXWEBSRV_RELEASE_LOG=buffered. */
-        RTLogFlush(pLoggerRelease);
-    }
-    else
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc);
+    /* create release logger, to stdout */
+    char szError[RTPATH_MAX + 128];
+    rc = com::VBoxLogRelCreate("web service", g_fDaemonize ? NULL : pszLogFile,
+                               RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                               "all", "VBOXWEBSRV_RELEASE_LOG",
+                               RTLOGDEST_STDOUT, UINT32_MAX /* cMaxEntriesPerGroup */,
+                               g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
+                               szError, sizeof(szError));
+    if (RT_FAILURE(rc))
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
 
 #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined (RT_OS_SOLARIS) || defined(RT_OS_FREEBSD)
@@ -1192,10 +1110,14 @@
         char szLogFile[RTPATH_MAX];
 
-        rc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
-        if (RT_FAILURE(rc))
-             return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not get base directory for logging: %Rrc", rc);
-        rc = RTPathAppend(szLogFile, sizeof(szLogFile), "vboxwebsrv.log");
-        if (RT_FAILURE(rc))
-             return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not construct logging path: %Rrc", rc);
+        if (!pszLogFile || !*pszLogFile)
+        {
+            rc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
+            if (RT_FAILURE(rc))
+                 return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not get base directory for logging: %Rrc", rc);
+            rc = RTPathAppend(szLogFile, sizeof(szLogFile), "vboxwebsrv.log");
+            if (RT_FAILURE(rc))
+                 return RTMsgErrorExit(RTEXITCODE_FAILURE, "could not construct logging path: %Rrc", rc);
+            pszLogFile = szLogFile;
+        }
 
         rc = RTProcDaemonizeUsingFork(false /* fNoChDir */, false /* fNoClose */, pszPidFile);
@@ -1203,26 +1125,13 @@
             return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to daemonize, rc=%Rrc. exiting.", rc);
 
-        /* create release logger */
-        PRTLOGGER pLoggerReleaseFile;
-        static const char * const s_apszGroupsFile[] = VBOX_LOGGROUP_NAMES;
-        RTUINT fFlagsFile = RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG;
-#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
-        fFlagsFile |= RTLOGFLAGS_USECRLF;
-#endif
-        char szErrorFile[RTPATH_MAX + 128] = "";
-        int vrc = RTLogCreateEx(&pLoggerReleaseFile, fFlagsFile, "all",
-                                "VBOXWEBSRV_RELEASE_LOG", RT_ELEMENTS(s_apszGroupsFile), s_apszGroupsFile, RTLOGDEST_FILE,
-                                WebLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                                szErrorFile, sizeof(szErrorFile), szLogFile);
-        if (RT_SUCCESS(vrc))
-        {
-            /* register this logger as the release logger */
-            RTLogRelSetDefaultInstance(pLoggerReleaseFile);
-
-            /* Explicitly flush the log in case of VBOXWEBSRV_RELEASE_LOG=buffered. */
-            RTLogFlush(pLoggerReleaseFile);
-        }
-        else
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szErrorFile, vrc);
+        /* create release logger, to file */
+        rc = com::VBoxLogRelCreate("web service", pszLogFile,
+                                   RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
+                                   "all", "VBOXWEBSRV_RELEASE_LOG",
+                                   RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
+                                   g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
+                                   szError, sizeof(szError));
+        if (RT_FAILURE(rc))
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
     }
 #endif
Index: /trunk/src/VBox/Main/webservice/websrv-cpp.xsl
===================================================================
--- /trunk/src/VBox/Main/webservice/websrv-cpp.xsl	(revision 41039)
+++ /trunk/src/VBox/Main/webservice/websrv-cpp.xsl	(revision 41040)
@@ -12,5 +12,5 @@
         generated for the webservice.
 
-     Copyright (C) 2006-2010 Oracle Corporation
+     Copyright (C) 2007-2012 Oracle Corporation
 
      This file is part of VirtualBox Open Source Edition (OSE), as
@@ -68,5 +68,4 @@
 #include <VBox/com/EventQueue.h>
 #include <VBox/VBoxAuth.h>
-#include <VBox/version.h>
 
 #include <iprt/assert.h>
