Changeset 41040 in vbox for trunk/src/VBox/Main/glue
- Timestamp:
- Apr 24, 2012 10:13:40 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 77602
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/glue/com.cpp
r39926 r41040 5 5 6 6 /* 7 * Copyright (C) 200 6-2007Oracle Corporation7 * Copyright (C) 2005-2012 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 41 41 #include "VBox/com/array.h" 42 42 43 #include <package-generated.h> 44 45 #include <iprt/buildconfig.h> 43 46 #include <iprt/param.h> 44 47 #include <iprt/path.h> … … 46 49 #include <iprt/env.h> 47 50 #include <iprt/string.h> 51 #include <iprt/system.h> 52 #include <iprt/process.h> 48 53 49 54 #include <VBox/err.h> 55 #include <VBox/version.h> 50 56 51 57 #ifdef RT_OS_DARWIN … … 212 218 } 213 219 220 static const char *g_pszLogEntity = NULL; 221 222 static 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 307 int 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 214 342 /* static */ 215 343 const Guid Guid::Empty; /* default ctor is OK */
Note:
See TracChangeset
for help on using the changeset viewer.