aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/android/android_logger.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-01-23 13:51:21 +0100
committerTobias Brunner <tobias@strongswan.org>2012-05-02 14:45:38 +0200
commitead92870b8645af72fae75b7f5c0c3475b327380 (patch)
tree8f4410ee338a64f5e69352513d5aab8fd49c7065 /src/libcharon/plugins/android/android_logger.c
parentd724fcd6240b56359fede1ff6ecd7f0c576dbd0d (diff)
downloadstrongswan-ead92870b8645af72fae75b7f5c0c3475b327380.tar.bz2
strongswan-ead92870b8645af72fae75b7f5c0c3475b327380.tar.xz
Loggers specify what log messages they want to receive during registration.
This also allows us to generate the log message only once for all loggers that need it (avoids calls to custom printf specifier callbacks). To update the log levels loggers can simply be registered again.
Diffstat (limited to 'src/libcharon/plugins/android/android_logger.c')
-rw-r--r--src/libcharon/plugins/android/android_logger.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/libcharon/plugins/android/android_logger.c b/src/libcharon/plugins/android/android_logger.c
index 845d3071e..d551f2714 100644
--- a/src/libcharon/plugins/android/android_logger.c
+++ b/src/libcharon/plugins/android/android_logger.c
@@ -47,34 +47,36 @@ struct private_android_logger_t {
METHOD(logger_t, log_, void,
- private_android_logger_t *this, debug_t group, level_t level,
- int thread, ike_sa_t* ike_sa, char *format, va_list args)
+ private_android_logger_t *this, debug_t group, level_t level,
+ int thread, ike_sa_t* ike_sa, char *message)
{
- if (level <= this->level)
- {
- int prio = level > 1 ? ANDROID_LOG_DEBUG : ANDROID_LOG_INFO;
- char sgroup[16], buffer[8192];
- char *current = buffer, *next;
- snprintf(sgroup, sizeof(sgroup), "%N", debug_names, group);
- vsnprintf(buffer, sizeof(buffer), format, args);
- this->mutex->lock(this->mutex);
- while (current)
- { /* log each line separately */
- next = strchr(current, '\n');
- if (next)
- {
- *(next++) = '\0';
- }
- __android_log_print(prio, "charon", "%.2d[%s] %s\n",
- thread, sgroup, current);
- current = next;
+ int prio = level > 1 ? ANDROID_LOG_DEBUG : ANDROID_LOG_INFO;
+ char sgroup[16];
+ char *current = message, *next;
+ snprintf(sgroup, sizeof(sgroup), "%N", debug_names, group);
+ this->mutex->lock(this->mutex);
+ while (current)
+ { /* log each line separately */
+ next = strchr(current, '\n');
+ if (next)
+ {
+ *(next++) = '\0';
}
- this->mutex->unlock(this->mutex);
+ __android_log_print(prio, "charon", "%.2d[%s] %s\n",
+ thread, sgroup, current);
+ current = next;
}
+ this->mutex->unlock(this->mutex);
+}
+
+METHOD(logger_t, get_level, level_t,
+ private_android_logger_t *this, debug_t group)
+{
+ return this->level;
}
METHOD(android_logger_t, destroy, void,
- private_android_logger_t *this)
+ private_android_logger_t *this)
{
this->mutex->destroy(this->mutex);
free(this);
@@ -91,6 +93,7 @@ android_logger_t *android_logger_create()
.public = {
.logger = {
.log = _log_,
+ .get_level = _get_level,
},
.destroy = _destroy,
},