VirtualBox

Changeset 41040 in vbox for trunk/src/VBox/Main/glue


Ignore:
Timestamp:
Apr 24, 2012 10:13:40 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77602
Message:

Main+Frontends: move release logging setup to the glue code (to eliminate spreading code duplication), various minor fixes and cleanups

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/glue/com.cpp

    r39926 r41040  
    55
    66/*
    7  * Copyright (C) 2006-2007 Oracle Corporation
     7 * Copyright (C) 2005-2012 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    4141#include "VBox/com/array.h"
    4242
     43#include <package-generated.h>
     44
     45#include <iprt/buildconfig.h>
    4346#include <iprt/param.h>
    4447#include <iprt/path.h>
     
    4649#include <iprt/env.h>
    4750#include <iprt/string.h>
     51#include <iprt/system.h>
     52#include <iprt/process.h>
    4853
    4954#include <VBox/err.h>
     55#include <VBox/version.h>
    5056
    5157#ifdef RT_OS_DARWIN
     
    212218}
    213219
     220static const char *g_pszLogEntity = NULL;
     221
     222static void vboxHeaderFooter(PRTLOGGER pReleaseLogger, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
     223{
     224    /* some introductory information */
     225    static RTTIMESPEC s_TimeSpec;
     226    char szTmp[256];
     227    if (enmPhase == RTLOGPHASE_BEGIN)
     228        RTTimeNow(&s_TimeSpec);
     229    RTTimeSpecToString(&s_TimeSpec, szTmp, sizeof(szTmp));
     230
     231    switch (enmPhase)
     232    {
     233        case RTLOGPHASE_BEGIN:
     234        {
     235            bool fOldBuffered = RTLogSetBuffering(pReleaseLogger, true /*fBuffered*/);
     236            pfnLog(pReleaseLogger,
     237                   "VirtualBox %s %s r%u %s (%s %s) release log\n"
     238#ifdef VBOX_BLEEDING_EDGE
     239                   "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
     240#endif
     241                   "Log opened %s\n",
     242                   g_pszLogEntity, VBOX_VERSION_STRING, RTBldCfgRevision(),
     243                   RTBldCfgTargetDotArch(), __DATE__, __TIME__, szTmp);
     244
     245            int vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
     246            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     247                pfnLog(pReleaseLogger, "OS Product: %s\n", szTmp);
     248            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
     249            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     250                pfnLog(pReleaseLogger, "OS Release: %s\n", szTmp);
     251            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
     252            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     253                pfnLog(pReleaseLogger, "OS Version: %s\n", szTmp);
     254            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szTmp, sizeof(szTmp));
     255            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     256                pfnLog(pReleaseLogger, "OS Service Pack: %s\n", szTmp);
     257
     258            vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_NAME, szTmp, sizeof(szTmp));
     259            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     260                pfnLog(pReleaseLogger, "DMI Product Name: %s\n", szTmp);
     261            vrc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_VERSION, szTmp, sizeof(szTmp));
     262            if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
     263                pfnLog(pReleaseLogger, "DMI Product Version: %s\n", szTmp);
     264
     265            uint64_t cbHostRam = 0, cbHostRamAvail = 0;
     266            vrc = RTSystemQueryTotalRam(&cbHostRam);
     267            if (RT_SUCCESS(vrc))
     268                vrc = RTSystemQueryAvailableRam(&cbHostRamAvail);
     269            if (RT_SUCCESS(vrc))
     270                pfnLog(pReleaseLogger, "Host RAM: %lluMB RAM, available: %lluMB\n",
     271                       cbHostRam / _1M, cbHostRamAvail / _1M);
     272
     273            /* the package type is interesting for Linux distributions */
     274            char szExecName[RTPATH_MAX];
     275            char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
     276            pfnLog(pReleaseLogger,
     277                   "Executable: %s\n"
     278                   "Process ID: %u\n"
     279                   "Package type: %s"
     280#ifdef VBOX_OSE
     281                   " (OSE)"
     282#endif
     283                   "\n",
     284                   pszExecName ? pszExecName : "unknown",
     285                   RTProcSelf(),
     286                   VBOX_PACKAGE_STRING);
     287            RTLogSetBuffering(pReleaseLogger, fOldBuffered);
     288            break;
     289        }
     290        case RTLOGPHASE_PREROTATE:
     291            pfnLog(pReleaseLogger, "Log rotated - Log started %s\n", szTmp);
     292            break;
     293
     294        case RTLOGPHASE_POSTROTATE:
     295            pfnLog(pReleaseLogger, "Log continuation - Log started %s\n", szTmp);
     296            break;
     297
     298        case RTLOGPHASE_END:
     299            pfnLog(pReleaseLogger, "End of log file - Log started %s\n", szTmp);
     300            break;
     301
     302        default:
     303            /* nothing */;
     304    }
     305}
     306
     307int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
     308                     uint32_t fFlags, const char *pcszGroupSettings,
     309                     const char *pcszEnvVarBase, uint32_t fDestFlags,
     310                     uint32_t cMaxEntriesPerGroup, uint32_t cHistory,
     311                     uint32_t uHistoryFileTime, uint64_t uHistoryFileSize,
     312                     char *pszError, size_t cbError)
     313{
     314    Assert(cbError >= RTPATH_MAX + 128);
     315
     316    /* create release logger */
     317    PRTLOGGER pReleaseLogger;
     318    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
     319#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     320    fFlags |= RTLOGFLAGS_USECRLF;
     321#endif
     322    g_pszLogEntity = pcszEntity;
     323    int vrc = RTLogCreateEx(&pReleaseLogger, fFlags, "all all.restrict default.unrestricted",
     324                            pcszEnvVarBase, RT_ELEMENTS(s_apszGroups), s_apszGroups, fDestFlags,
     325                            vboxHeaderFooter, cHistory, uHistoryFileSize, uHistoryFileTime,
     326                            pszError, cbError, pcszLogFile);
     327    if (RT_SUCCESS(vrc))
     328    {
     329        /* make sure that we don't flood logfiles */
     330        RTLogSetGroupLimit(pReleaseLogger, cMaxEntriesPerGroup);
     331
     332        /* explicitly flush the log, to have some info when buffering */
     333        RTLogFlush(pReleaseLogger);
     334
     335        /* register this logger as the release logger */
     336        RTLogRelSetDefaultInstance(pReleaseLogger);
     337    }
     338    return vrc;
     339}
     340
     341
    214342/* static */
    215343const Guid Guid::Empty; /* default ctor is OK */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette