static void os_defaultDiag ( const char *cluster, os_diagLevel level, const char *description, va_list args) { os_time ostime; char extended_description[512]; char procIdentity[64]; char threadIdentity[64]; char node[64]; ostime = os_timeGet(); os_vsnprintf (extended_description, sizeof(extended_description)-1, description, args); extended_description [sizeof(extended_description)-1] = '\0'; os_gethostname (node, sizeof(node)); os_threadFigureIdentity (threadIdentity, sizeof (threadIdentity)-1); threadIdentity [sizeof (threadIdentity)-1] = '\0'; os_procFigureIdentity (procIdentity, sizeof (procIdentity)-1); procIdentity [sizeof (procIdentity)-1] = '\0'; printf ( "Diag - %s:%s:%s - T:%d.%9.9d L:%s C:%s D:%s\n", node, procIdentity, threadIdentity, ostime.tv_sec, ostime.tv_nsec, os_diagLevelText[level], cluster, extended_description); }
/** * Get the destination for logging error reports. Env property OSPL_INFOFILE and * OSPL_LOGPATH controls this value. * If OSPL_INFOFILE is not set & this process is an OpenSplice service default * to logging to a file named ospl-info.log, otherwise * use standard out. * @see os_report_file_path */ char * os_reportGetInfoFileName() { char* file_name; char procIdentity[256]; static os_boolean doneOnce = OS_FALSE; os_reportInit(OS_FALSE); file_name = os_report_file_path ("ospl-info.log", (os_char *)os_env_infofile); /* @todo dds2881 - Uncomment below & remove above to enable application default error logging to stderr */ /* file_name = os_report_file_path (os_procIsOpenSpliceService() ? "ospl-info.log" : "<stdout>", os_env_infofile);*/ os_procFigureIdentity(procIdentity, sizeof (procIdentity)-1); procIdentity[sizeof (procIdentity)-1] = '\0'; if (!doneOnce) { doneOnce = OS_TRUE; if (!doAppend) { os_remove (file_name); } } return file_name; }
void os_report( os_reportType reportType, const char *reportContext, const char *fileName, os_int32 lineNo, os_int32 reportCode, const char *description, ...) { va_list args; unsigned int i; const char *file_name = fileName; const char *ptr; char xml_description[1024]; char extended_description[1024]; char threadIdentity[64]; char procIdentity[256]; struct os_reportEventV1_s eventDetails = { OS_REPORT_EVENT_V1, /* version */ 0, /* reportType */ NULL, /* reportContext */ NULL, /* fileName */ 0, /* lineNo */ 0, /* code */ NULL, /*description */ NULL, /* threadDesc */ NULL /*processDesc */ }; #ifdef WIN32 char file_separator = '\\'; #else char file_separator = '/'; #endif eventDetails.description = (char*) &extended_description; eventDetails.threadDesc = (char*) &threadIdentity; eventDetails.processDesc = (char*) &procIdentity; if (reportType < os_reportVerbosity) { /* This level / type of report is below the process output suppression threshold. */ return; } va_start(args, description); os_vsnprintf(extended_description, sizeof(extended_description)-1, description, args); va_end(args); extended_description[sizeof(extended_description)-1] = '\0'; os_threadFigureIdentity(threadIdentity, sizeof (threadIdentity)-1); threadIdentity[sizeof (threadIdentity)-1] = '\0'; os_procFigureIdentity(procIdentity, sizeof (procIdentity)-1); procIdentity[sizeof (procIdentity)-1] = '\0'; eventDetails.reportType = reportType; eventDetails.reportContext = reportContext; eventDetails.lineNo = lineNo; eventDetails.code = reportCode; for (ptr=fileName; *ptr!=0; ptr++) { if (*ptr == file_separator) { file_name = (char *)((os_address)ptr+1); } } eventDetails.fileName = file_name; if (os_reportServicesCount != 0) { for (i = 0; i < OS_REPORTSERVICES_MAX; i++) { if (os_reportServices[i].os_reportContext != 0) { /* Must call va_start and va_end before and after each call to the plugged in services */ va_start(args, description); os_reportServices[i].os_reportService(os_reportServices[i].os_reportContext, reportType, reportContext, file_name, lineNo, reportCode, description, args); va_end(args); } } } if (reportPluginAdmin != NULL){ if (xmlReportPluginsCount > 0) { /* print format the XML string only if at least one plugin * has been registered with an XML Report method */ os_sprintf (xml_description, "<%s>\n" "<DESCRIPTION>%s</DESCRIPTION>\n" "<CONTEXT>%s</CONTEXT>\n" "<FILE>%s</FILE>\n" "<LINE>%d</LINE>\n" "<CODE>%d</CODE>\n" "</%s>\n", os_reportTypeText[reportType], extended_description, reportContext, file_name, lineNo, reportCode, os_reportTypeText[reportType]); xml_description[sizeof(xml_description)-1] = '\0'; } for (i = 0; i < reportPluginAdmin->size; i++){ if (reportPluginAdmin->reportArray[i] != NULL) { if (reportPluginAdmin->reportArray[i]->report_symbol != NULL) { reportPluginAdmin->reportArray[i]->report_symbol (reportPluginAdmin->reportArray[i]->plugin_context, xml_description); } if (reportPluginAdmin->reportArray[i]->typedreport_symbol != NULL) { reportPluginAdmin->reportArray[i]->typedreport_symbol (reportPluginAdmin->reportArray[i]->plugin_context, (os_reportEvent) &eventDetails); } } } } if (doDefault) { os_defaultReport(&eventDetails); } va_start(args, description); if (reportType == OS_API_INFO) { char sourceLine[512]; snprintf(sourceLine, sizeof(sourceLine), "%s::%d", file_name, lineNo); sourceLine[sizeof(sourceLine)-1] = '\0'; os_reportSetApiInfoRec(reportContext, sourceLine, NULL, reportCode, description, args); } va_end(args); }