Changeset 793cce15 in mainline for uspace/srv/logger/namespace.c
- Timestamp:
- 2012-08-16T14:22:56Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 32b26cf7
- Parents:
- 9a53e00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/logger/namespace.c
r9a53e00 r793cce15 41 41 */ 42 42 43 #define CONTEXT_SIZE 16 44 45 typedef struct { 46 const char *name; 47 log_level_t level; 48 } logging_context_t; 43 49 44 50 struct logging_namespace { … … 50 56 const char *name; 51 57 58 // FIXME: make dynamic 59 size_t context_count; 60 logging_context_t context[CONTEXT_SIZE]; 61 52 62 link_t link; 53 63 }; … … 56 66 static LIST_INITIALIZE(namespace_list); 57 67 58 static log_level_t namespace_get_actual_log_level(logging_namespace_t *namespace) 59 { 60 fibril_mutex_lock(&namespace->guard); 61 log_level_t level = namespace->level; 68 static log_level_t namespace_get_actual_log_level(logging_namespace_t *namespace, sysarg_t context) 69 { 70 fibril_mutex_lock(&namespace->guard); 71 if (context >= namespace->context_count) { 72 fibril_mutex_unlock(&namespace->guard); 73 return LVL_FATAL; 74 } 75 log_level_t level = namespace->context[context].level; 62 76 fibril_mutex_unlock(&namespace->guard); 63 77 … … 115 129 namespace->level = LOG_LEVEL_USE_DEFAULT; 116 130 131 namespace->context_count = 1; 132 namespace->context[0].name = ""; 133 namespace->context[0].level = LOG_LEVEL_USE_DEFAULT; 134 117 135 fibril_mutex_initialize(&namespace->guard); 118 136 fibril_condvar_initialize(&namespace->level_changed_cv); … … 206 224 fibril_mutex_lock(&namespace->guard); 207 225 namespace->level = level; 226 for (size_t i = 0; i < namespace->context_count; i++) { 227 namespace->context[i].level = level; 228 } 208 229 fibril_condvar_broadcast(&namespace->level_changed_cv); 209 230 fibril_mutex_unlock(&namespace->guard); … … 213 234 214 235 215 bool namespace_has_reader(logging_namespace_t *namespace, log_level_t level) 216 { 217 return level <= namespace_get_actual_log_level(namespace); 236 bool namespace_has_reader(logging_namespace_t *namespace, sysarg_t context, log_level_t level) 237 { 238 return level <= namespace_get_actual_log_level(namespace, context); 239 } 240 241 int namespace_create_context(logging_namespace_t *namespace, const char *name) 242 { 243 int rc; 244 fibril_mutex_lock(&namespace->guard); 245 if (namespace->context_count >= CONTEXT_SIZE) { 246 rc = ELIMIT; 247 goto leave; 248 } 249 250 namespace->context[namespace->context_count].level 251 = LOG_LEVEL_USE_DEFAULT; 252 namespace->context[namespace->context_count].name 253 = str_dup(name); 254 if (namespace->context[namespace->context_count].name == NULL) { 255 rc = ENOMEM; 256 goto leave; 257 } 258 rc = (int) namespace->context_count; 259 namespace->context_count++; 260 261 262 leave: 263 fibril_mutex_unlock(&namespace->guard); 264 return rc; 218 265 } 219 266 … … 230 277 231 278 232 void namespace_add_message(logging_namespace_t *namespace, const char *message, log_level_t level)233 { 234 if (level <= namespace_get_actual_log_level(namespace )) {279 void namespace_add_message(logging_namespace_t *namespace, const char *message, sysarg_t context, log_level_t level) 280 { 281 if (level <= namespace_get_actual_log_level(namespace, context)) { 235 282 const char *level_name = log_level_str(level); 236 printf("[%s %s]: %s\n", namespace->name, level_name, message); 237 fprintf(namespace->logfile, "%s: %s\n", level_name, message); 283 if (context == 0) { 284 printf("[%s %s]: %s\n", 285 namespace->name, level_name, message); 286 fprintf(namespace->logfile, "%s: %s\n", 287 level_name, message); 288 } else { 289 const char *context_name = namespace->context[context].name; 290 printf("[%s/%s %s]: %s\n", 291 namespace->name, context_name, level_name, message); 292 fprintf(namespace->logfile, "[%s] %s: %s\n", 293 context_name, level_name, message); 294 } 238 295 fflush(namespace->logfile); 239 296 fflush(stdout);
Note:
See TracChangeset
for help on using the changeset viewer.