summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Vacek <stefan.vacek@intel.com>2015-12-02 09:24:52 +0100
committerLutz Helwing <lutz_helwing@mentor.com>2015-12-09 16:02:28 +0100
commit135e75439eff9cb7171d8b5bcf2ff6a27d0bf132 (patch)
tree25c167511d1646328217b8bd9e47748c6c6f1c24 /src
parent4251a7db0b2a576316a2a5435b72a709fd6101b0 (diff)
downloadDLT-daemon-135e75439eff9cb7171d8b5bcf2ff6a27d0bf132.tar.gz
Set default log-levels in dlt.conf
- feature: allow to define a default-log-level in dlt.conf (see dlt.conf for documentation) - bugfix: make dlt_unlock_mutex not inline to fix linkage - bugfix: initial log-level was not set correctly when no dlt-daemon was running Signed-off-by: Stefan Vacek <stefan.vacek@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/daemon/dlt-daemon.c52
-rw-r--r--src/daemon/dlt-daemon.h3
-rw-r--r--src/daemon/dlt.conf14
-rw-r--r--src/daemon/dlt_daemon_client.c24
-rw-r--r--src/daemon/dlt_daemon_common.c32
-rw-r--r--src/daemon/dlt_daemon_common.h11
-rw-r--r--src/daemon/dlt_daemon_common_cfg.h5
-rw-r--r--src/lib/dlt_user.c4
-rw-r--r--src/system/dlt-system-journal.c2
9 files changed, 114 insertions, 33 deletions
diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c
index c8af773..804b36b 100644
--- a/src/daemon/dlt-daemon.c
+++ b/src/daemon/dlt-daemon.c
@@ -241,13 +241,16 @@ int option_file_parser(DltDaemonLocal *daemon_local)
daemon_local->flags.offlineLogstorageDelimiter = '_';
daemon_local->flags.offlineLogstorageMaxCounter = UINT_MAX;
daemon_local->flags.offlineLogstorageMaxCounterIdx = 0;
- daemon_local->flags.offlineLogstorageCacheSize = 30000; /* 30MB */
+ daemon_local->flags.offlineLogstorageCacheSize = 30000; /* 30MB */
dlt_daemon_logstorage_set_logstorage_cache_size(
- daemon_local->flags.offlineLogstorageCacheSize);
- strncpy(daemon_local->flags.ctrlSockPath,
+ daemon_local->flags.offlineLogstorageCacheSize);
+ strncpy(daemon_local->flags.ctrlSockPath,
DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH,
sizeof(daemon_local->flags.ctrlSockPath) - 1);
- daemon_local->flags.gatewayMode = 0;
+ daemon_local->flags.gatewayMode = 0;
+ daemon_local->flags.contextLogLevel = DLT_LOG_INFO;
+ daemon_local->flags.contextTraceStatus = DLT_TRACE_STATUS_OFF;
+ daemon_local->flags.enforceContextLLAndTS = 0; /* default is off */
/* open configuration file */
if(daemon_local->flags.cvalue[0])
@@ -489,6 +492,45 @@ int option_file_parser(DltDaemonLocal *daemon_local)
daemon_local->flags.gatewayMode = atoi(value);
//printf("Option: %s=%s\n",token,value);
}
+ else if(strcmp(token,"ContextLogLevel")==0)
+ {
+ int const intval = atoi(value);
+ if ( (intval >= DLT_LOG_OFF) && (intval <= DLT_LOG_VERBOSE))
+ {
+ daemon_local->flags.contextLogLevel = intval;
+ printf("Option: %s=%s\n",token,value);
+ }
+ else
+ {
+ fprintf(stderr, "Invalid value for ContextLogLevel: %i. Must be in range [%i..%i]\n", intval, DLT_LOG_OFF, DLT_LOG_VERBOSE);
+ }
+ }
+ else if(strcmp(token,"ContextTraceStatus")==0)
+ {
+ int const intval = atoi(value);
+ if ( (intval >= DLT_TRACE_STATUS_OFF) && (intval <= DLT_TRACE_STATUS_ON))
+ {
+ daemon_local->flags.contextTraceStatus = intval;
+ printf("Option: %s=%s\n",token,value);
+ }
+ else
+ {
+ fprintf(stderr, "Invalid value for ContextTraceStatus: %i. Must be in range [%i..%i]\n", intval, DLT_TRACE_STATUS_OFF, DLT_TRACE_STATUS_ON);
+ }
+ }
+ else if(strcmp(token,"ForceContextLogLevelAndTraceStatus")==0)
+ {
+ int const intval = atoi(value);
+ if ( (intval >= 0) && (intval <= 1))
+ {
+ daemon_local->flags.enforceContextLLAndTS = intval;
+ printf("Option: %s=%s\n",token,value);
+ }
+ else
+ {
+ fprintf(stderr, "Invalid value for ForceContextLogLevelAndTraceStatus: %i. Must be 0, 1\n", intval);
+ }
+ }
else
{
fprintf(stderr, "Unknown option: %s=%s\n",token,value);
@@ -775,7 +817,7 @@ int dlt_daemon_local_init_p2(DltDaemon *daemon, DltDaemonLocal *daemon_local, in
}
/* Daemon data */
- if (dlt_daemon_init(daemon,daemon_local->RingbufferMinSize,daemon_local->RingbufferMaxSize,daemon_local->RingbufferStepSize,daemon_local->flags.ivalue,daemon_local->flags.vflag)==-1)
+ if (dlt_daemon_init(daemon,daemon_local->RingbufferMinSize,daemon_local->RingbufferMaxSize,daemon_local->RingbufferStepSize, daemon_local->flags.ivalue,daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus,daemon_local->flags.enforceContextLLAndTS,daemon_local->flags.vflag)==-1)
{
dlt_log(LOG_ERR,"Could not initialize daemon data\n");
return -1;
diff --git a/src/daemon/dlt-daemon.h b/src/daemon/dlt-daemon.h
index 2dffcc9..7f26d82 100644
--- a/src/daemon/dlt-daemon.h
+++ b/src/daemon/dlt-daemon.h
@@ -124,6 +124,9 @@ typedef struct
unsigned int port; /**< port number */
char ctrlSockPath[DLT_DAEMON_FLAG_MAX]; /**< Path to Control socket */
int gatewayMode; /**< (Boolean) Gateway Mode */
+ int contextLogLevel; /**< (int) log level sent to context if registered with default log-level or if enforced*/
+ int contextTraceStatus; /**< (int) trace status sent to context if registered with default trace status or if enforced*/
+ int enforceContextLLAndTS; /**< (Boolean) Enforce log-level, trace-status not to exceed contextLogLevel, contextTraceStatus */
} DltDaemonFlags;
/**
* The global parameters of a dlt daemon.
diff --git a/src/daemon/dlt.conf b/src/daemon/dlt.conf
index aab9c7d..376a94f 100644
--- a/src/daemon/dlt.conf
+++ b/src/daemon/dlt.conf
@@ -6,7 +6,7 @@
# General configuration #
########################################################################
-# Start daemon in dubug mode, so that all internal debug information is printed out on the console
+# Start daemon in debug mode, so that all internal debug information is printed out on the console
# Verbose = 1
# Daemonize DLT daemon, if it is started as daemon
@@ -56,6 +56,18 @@ RingbufferMaxSize = 10000000
# The step size the Ringbuffer is increased, used for storing temporary DLT messages, until client is connected (Default: 500000)
RingbufferStepSize = 500000
+# Initial log-level that is sent when an application registers (Default: 4)
+# DLT_LOG_OFF = 0, DLT_LOG_FATAL = 1, DLT_LOG_ERROR = 2, DLT_LOG_WARN = 3, DLT_LOG_INFO = 4, DLT_LOG_DEBUG = 5, DLT_LOG_VERBOSE = 6
+# ContextLogLevel = 4
+
+# Initial trace-status that is sent when an application registers (Default: 0)
+# DLT_TRACE_STATUS_OFF = 0, DLT_TRACE_STATUS_ON = 1
+# ContextTraceStatus = 0
+
+# Force log level and trace status of context to not exceed "ContextLogLevel" and "ContextTraceStatus" (Default: 0 = OFF)
+# If set to 1 (ON) whenever a context registers or changes the log-level it has to be lower or equal to ContextLogLevel
+# ForceContextLogLevelAndTraceStatus = 1
+
########################################################################
# Control Application #
########################################################################
diff --git a/src/daemon/dlt_daemon_client.c b/src/daemon/dlt_daemon_client.c
index b23c5bb..9e7638d 100644
--- a/src/daemon/dlt_daemon_client.c
+++ b/src/daemon/dlt_daemon_client.c
@@ -469,26 +469,26 @@ int dlt_daemon_client_process_control(int sock, DltDaemon *daemon, DltDaemonLoca
{
if (dlt_daemon_applications_save(daemon, daemon->runtime_application_cfg, verbose)==0)
{
- if (dlt_daemon_contexts_save(daemon, daemon->runtime_context_cfg, verbose)==0)
- {
- dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose);
- }
- else
- {
- /* Delete saved files */
- dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, verbose);
- dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose);
- }
+ if (dlt_daemon_contexts_save(daemon, daemon->runtime_context_cfg, verbose)==0)
+ {
+ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose);
+ }
+ else
+ {
+ /* Delete saved files */
+ dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose);
+ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose);
+ }
}
else
{
- dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose);
+ dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose);
}
break;
}
case DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT:
{
- dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, verbose);
+ dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose);
dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose);
break;
}
diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c
index 5353830..6523136 100644
--- a/src/daemon/dlt_daemon_common.c
+++ b/src/daemon/dlt_daemon_common.c
@@ -129,7 +129,7 @@ static int dlt_daemon_cmp_apid_ctid(const void *m1, const void *m2)
return ret;
}
-int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned long RingbufferMaxSize, unsigned long RingbufferStepSize, const char *runtime_directory, int verbose)
+int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose)
{
PRINT_FUNCTION_VERBOSE(verbose);
@@ -143,8 +143,9 @@ int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned
daemon->num_applications = 0;
daemon->applications = NULL;
- daemon->default_log_level = DLT_DAEMON_INITIAL_LOG_LEVEL ;
- daemon->default_trace_status = DLT_DAEMON_INITIAL_TRACE_STATUS ;
+ daemon->default_log_level = InitialContextLogLevel;
+ daemon->default_trace_status = InitialContextTraceStatus;
+ daemon->force_ll_ts = ForceLLTS;
daemon->overflow_counter = 0;
@@ -704,6 +705,20 @@ DltDaemonContext* dlt_daemon_context_add(DltDaemon *daemon, char *apid, char *ct
}
}
+ if (daemon->force_ll_ts)
+ {
+ if (log_level > daemon->default_log_level)
+ {
+ log_level = daemon->default_log_level;
+ }
+ if (trace_status > daemon->default_trace_status)
+ {
+ trace_status = daemon->default_trace_status;
+ }
+ snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Adapting ll_ts for context: %.4s:%.4s with %i %i\n", apid, ctid, log_level, trace_status);
+ dlt_log(LOG_NOTICE, str);
+ }
+
/* Store log level and trace status,
if this is a new context, or
if this is an old context and the runtime cfg was not loaded */
@@ -1122,6 +1137,10 @@ int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context,
usercontext.log_level_pos = context->log_level_pos;
+ snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Send log-level to context: %.4s:%.4s [%i -> %i] [%i -> %i]\n",
+ context->apid, context->ctid, context->log_level, usercontext.log_level, context->trace_status, usercontext.trace_status);
+ dlt_log(LOG_NOTICE, str);
+
/* log to FIFO */
ret = dlt_user_log_out2(context->user_handle,
&(userheader), sizeof(DltUserHeader),
@@ -1174,7 +1193,7 @@ int dlt_daemon_user_send_log_state(DltDaemon *daemon, DltDaemonApplication *app,
return ((ret == DLT_RETURN_OK) ? DLT_RETURN_OK : DLT_RETURN_ERROR);
}
-void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char *filename, const char *filename1, int verbose)
+void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose)
{
FILE *fd;
@@ -1211,8 +1230,9 @@ void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char *
unlink(filename1);
}
- daemon->default_log_level = DLT_DAEMON_INITIAL_LOG_LEVEL ;
- daemon->default_trace_status = DLT_DAEMON_INITIAL_TRACE_STATUS ;
+ daemon->default_log_level = InitialContextLogLevel;
+ daemon->default_trace_status = InitialContextTraceStatus;
+ daemon->force_ll_ts = InitialEnforceLlTsStatus;
/* Reset all other things (log level, trace status, etc.
to default values */
diff --git a/src/daemon/dlt_daemon_common.h b/src/daemon/dlt_daemon_common.h
index e93d0d7..71d3dce 100644
--- a/src/daemon/dlt_daemon_common.h
+++ b/src/daemon/dlt_daemon_common.h
@@ -150,6 +150,7 @@ typedef struct
DltDaemonApplication *applications; /**< Pointer to applications */
int8_t default_log_level; /**< Default log level (of daemon) */
int8_t default_trace_status; /**< Default trace status (of daemon) */
+ int8_t force_ll_ts; /**< Enforce ll and ts to not exceed default_log_level, default_trace_status */
unsigned int overflow_counter; /**< counts the number of lost messages. */
int runtime_context_cfg_loaded; /**< Set to one, if runtime context configuration has been loaded, zero otherwise */
char ecuid[DLT_ID_SIZE]; /**< ECU ID of daemon */
@@ -174,10 +175,13 @@ typedef struct
* @param RingbufferMaxSize ringbuffer size
* @param RingbufferStepSize ringbuffer size
* @param runtime_directory Directory of persistent configuration
+ * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf
+ * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf
+ * @param ForceLLTS force default log-level
* @param verbose if set to true verbose information is printed out.
* @return negative value if there was an error
*/
-int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int verbose);
+int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose);
/**
* De-Initialise the dlt daemon structure
* @param daemon pointer to dlt daemon structure
@@ -363,9 +367,12 @@ void dlt_daemon_user_send_all_log_state(DltDaemon *daemon, int verbose);
* @param daemon pointer to dlt daemon structure
* @param filename name of file containing the runtime defaults for applications
* @param filename1 name of file containing the runtime defaults for contexts
+ * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf
+ * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf
+ * @param ForceLLTS force default log-level
* @param verbose if set to true verbose information is printed out.
*/
-void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int verbose);
+void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose);
/**
* Change the logging state of dlt daemon
diff --git a/src/daemon/dlt_daemon_common_cfg.h b/src/daemon/dlt_daemon_common_cfg.h
index d08a20e..5df87fa 100644
--- a/src/daemon/dlt_daemon_common_cfg.h
+++ b/src/daemon/dlt_daemon_common_cfg.h
@@ -91,11 +91,6 @@
/* Size of text buffer */
#define DLT_DAEMON_COMMON_TEXTBUFSIZE 255
-/* Initial log level */
-#define DLT_DAEMON_INITIAL_LOG_LEVEL DLT_LOG_INFO
-/* Initial trace status */
-#define DLT_DAEMON_INITIAL_TRACE_STATUS DLT_TRACE_STATUS_OFF
-
/* Application ID used when the dlt daemon creates a control message */
#define DLT_DAEMON_CTRL_APID "DA1"
/* Context ID used when the dlt daemon creates a control message */
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 8a5d683..d5ed200 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -102,7 +102,7 @@ void dlt_lock_mutex(pthread_mutex_t *mutex)
}
}
-inline void dlt_unlock_mutex(pthread_mutex_t *mutex)
+void dlt_unlock_mutex(pthread_mutex_t *mutex)
{
pthread_mutex_unlock(mutex);
}
@@ -1054,6 +1054,8 @@ DltReturnValue dlt_unregister_context(DltContext *handle)
DltContextData log;
DltReturnValue ret = DLT_RETURN_OK;
+ log.handle = NULL;
+ log.context_description = NULL;
if (dlt_user_log_init(handle, &log) <= DLT_RETURN_ERROR)
return DLT_RETURN_ERROR;
diff --git a/src/system/dlt-system-journal.c b/src/system/dlt-system-journal.c
index cc7ada0..5d9d7ef 100644
--- a/src/system/dlt-system-journal.c
+++ b/src/system/dlt-system-journal.c
@@ -200,7 +200,7 @@ void dlt_system_journal_get_timestamp(sd_journal *journal, MessageTimestamp *tim
}
}
- snprintf(timestamp->monotonic, sizeof(timestamp->monotonic), "%llu.%06llu", time_usecs / 1000000, time_usecs % 1000000);
+ snprintf(timestamp->monotonic, sizeof(timestamp->monotonic), "%"PRId64".%06"PRIu64, time_usecs / 1000000, time_usecs % 1000000);
}
void journal_thread(void *v_conf)