diff --git a/log/log.c b/log/log.c
index f69662b47c4ea3ba45e454c7fe53df67975f077e..7eb9933425c6cbff94aad0b085b603e0d97ddc02 100644
--- a/log/log.c
+++ b/log/log.c
@@ -439,6 +439,39 @@ void log_contents (int log_id, char **_contents, unsigned int *_len)
     _unlock_logger ();
 }
 
+char ** log_contents_array(int log_id)
+{
+    log_entry_t *entry;
+    char **ret;
+    size_t i;
+
+    if (log_id < 0) return NULL;
+    if (log_id >= LOG_MAXLOGS) return NULL; /* Bad log number */
+
+    _lock_logger();
+    ret = calloc(loglist[log_id].entries + 1, sizeof(char*));
+    if (!ret) {
+        _unlock_logger();
+        return NULL;
+    }
+
+    i = 0;
+    entry = loglist[log_id].log_head;
+    while (entry) {
+        ret[i] = malloc(entry->len);
+        memcpy(ret[i], entry->line, entry->len);
+        if (ret[i][entry->len-2] == '\n')
+            ret[i][entry->len-2] = 0;
+        entry = entry->next;
+        i++;
+    }
+    ret[i] = NULL;
+
+    _unlock_logger();
+
+    return ret;
+}
+
 static inline int __vsnprintf__is_print(int c, int allow_space)
 {
     if ((c <= '"' || c == '`' || c == '\\') && !(allow_space && c == ' ')) {
diff --git a/log/log.h b/log/log.h
index 1bddf773ad41a9dc7739b8b6fa546a6e54bde237..c16e05b56fef25f3dc39f044b4ee44d8111088b1 100644
--- a/log/log.h
+++ b/log/log.h
@@ -52,6 +52,7 @@ void log_set_trigger(int id, unsigned trigger);
 int  log_set_filename(int id, const char *filename);
 void log_set_lines_kept (int log_id, unsigned int count);
 void log_contents (int log_id, char **_contents, unsigned int *_len);
+char ** log_contents_array(int log_id);
 int log_set_archive_timestamp(int id, int value);
 void log_flush(int log_id);
 void log_reopen(int log_id);