void logger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message) { char buf[10000]; const char* loadingstr = "Loading '"; /* need to replace platform specific message with a standard one */ if( (log_level == jm_log_level_info) && (strcmp(module, "FMILIB") == 0) && (strncmp(message, "Loading '", strlen(loadingstr)) == 0) ) { jm_snprintf(buf, 10000, "[INFO][FMILIB] Loading '-----' binary with '------' platform types\n"); } else jm_snprintf(buf, 10000, "[%s][%s] %s\n", jm_log_level_to_string(log_level), module, message); printf("%s", buf); fprintf(logFile, "%s", buf); }
static void importlogger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message) { const char* tokens[3] = {module,jm_log_level_to_string(log_level),message}; switch (log_level) { case jm_log_level_fatal: case jm_log_level_error: c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_error, gettext("module = %s, log level = %s: %s"), tokens, 3); break; case jm_log_level_warning: c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_warning, gettext("module = %s, log level = %s: %s"), tokens, 3); break; case jm_log_level_info: case jm_log_level_verbose: case jm_log_level_debug: c_add_message(NULL,-1, ErrorType_scripting, ErrorLevel_notification, gettext("module = %s, log level = %s: %s"), tokens, 3); break; default: printf("module = %s, log level = %d: %s\n", module, log_level, message);fflush(NULL); break; } }
void fmi1_logger(jm_callbacks* cb, jm_string module, jm_log_level_enu_t log_level, jm_string message) { fmi1_callback_functions_t* c = (fmi1_callback_functions_t*)cb->context; fmi1_status_t status; if(!c ||!c->logger) return; if(log_level > jm_log_level_all) { assert(0); status = fmi1_status_error; } else if(log_level >= jm_log_level_info) status = fmi1_status_ok; else if(log_level >= jm_log_level_warning) status = fmi1_status_warning; else if(log_level >= jm_log_level_error) status = fmi1_status_error; else if(log_level >= jm_log_level_fatal) status = fmi1_status_fatal; else { status = fmi1_status_ok; } c->logger( c, module, status, jm_log_level_to_string(log_level), message); }
void* FMI2ModelExchangeConstructor_OMC(int fmi_log_level, char* working_directory, char* instanceName, int debugLogging) { FMI2ModelExchange* FMI2ME = malloc(sizeof(FMI2ModelExchange)); jm_status_enu_t status, instantiateModelStatus; FMI2ME->FMILogLevel = fmi_log_level; /* JM callbacks */ FMI2ME->JMCallbacks.malloc = malloc; FMI2ME->JMCallbacks.calloc = calloc; FMI2ME->JMCallbacks.realloc = realloc; FMI2ME->JMCallbacks.free = free; FMI2ME->JMCallbacks.logger = importlogger; FMI2ME->JMCallbacks.log_level = FMI2ME->FMILogLevel; FMI2ME->JMCallbacks.context = 0; FMI2ME->FMIImportContext = fmi_import_allocate_context(&FMI2ME->JMCallbacks); /* parse the xml file */ FMI2ME->FMIWorkingDirectory = (char*) malloc(strlen(working_directory)+1); strcpy(FMI2ME->FMIWorkingDirectory, working_directory); FMI2ME->FMIImportInstance = fmi2_import_parse_xml(FMI2ME->FMIImportContext, FMI2ME->FMIWorkingDirectory, NULL); if(!FMI2ME->FMIImportInstance) { FMI2ME->FMISolvingMode = fmi2_none_mode; ModelicaFormatError("Error parsing the XML file contained in %s\n", FMI2ME->FMIWorkingDirectory); return 0; } /* FMI callback functions */ FMI2ME->FMICallbackFunctions.logger = fmi2logger; FMI2ME->FMICallbackFunctions.allocateMemory = calloc; FMI2ME->FMICallbackFunctions.freeMemory = free; FMI2ME->FMICallbackFunctions.componentEnvironment = FMI2ME->FMIImportInstance; /* Load the binary (dll/so) */ status = fmi2_import_create_dllfmu(FMI2ME->FMIImportInstance, fmi2_import_get_fmu_kind(FMI2ME->FMIImportInstance), &FMI2ME->FMICallbackFunctions); if (status == jm_status_error) { FMI2ME->FMISolvingMode = fmi2_none_mode; ModelicaFormatError("Loading of FMU dynamic link library failed with status : %s\n", jm_log_level_to_string(status)); return 0; } FMI2ME->FMIInstanceName = (char*) malloc(strlen(instanceName)+1); strcpy(FMI2ME->FMIInstanceName, instanceName); FMI2ME->FMIDebugLogging = debugLogging; instantiateModelStatus = fmi2_import_instantiate(FMI2ME->FMIImportInstance, FMI2ME->FMIInstanceName, fmi2_model_exchange, NULL, fmi2_false); if (instantiateModelStatus == jm_status_error) { FMI2ME->FMISolvingMode = fmi2_none_mode; ModelicaFormatError("fmi2InstantiateModel failed with status : %s\n", jm_log_level_to_string(instantiateModelStatus)); return 0; } /* Only call fmi2SetDebugLogging if debugLogging is true */ if (FMI2ME->FMIDebugLogging) { int i; size_t categoriesSize = 0; fmi2_status_t debugLoggingStatus; fmi2_string_t *categories; /* Read the log categories size */ categoriesSize = fmi2_import_get_log_categories_num(FMI2ME->FMIImportInstance); categories = (fmi2_string_t*)malloc(categoriesSize*sizeof(fmi2_string_t)); for (i = 0 ; i < categoriesSize ; i++) { categories[i] = fmi2_import_get_log_category(FMI2ME->FMIImportInstance, i); } debugLoggingStatus = fmi2_import_set_debug_logging(FMI2ME->FMIImportInstance, FMI2ME->FMIDebugLogging, categoriesSize, categories); if (debugLoggingStatus != fmi2_status_ok && debugLoggingStatus != fmi2_status_warning) { ModelicaFormatMessage("fmi2SetDebugLogging failed with status : %s\n", fmi1_status_to_string(debugLoggingStatus)); } } FMI2ME->FMIToleranceControlled = fmi2_true; FMI2ME->FMIRelativeTolerance = 0.001; FMI2ME->FMIEventInfo = malloc(sizeof(fmi2_event_info_t)); FMI2ME->FMISolvingMode = fmi2_instantiated_mode; return FMI2ME; }
void importlogger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message) { printf("module = %s, log level = %s: %s\n", module, jm_log_level_to_string(log_level), message); }