mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-19 21:27:57 +00:00
Add log_context
This commit is contained in:
parent
8d799840df
commit
cf0e1aa8d6
@ -315,6 +315,8 @@ static void call_alarm(struct sched_ent *alarm, int revents)
|
|||||||
alarm->poll.revents = revents;
|
alarm->poll.revents = revents;
|
||||||
alarm->function(alarm);
|
alarm->function(alarm);
|
||||||
|
|
||||||
|
strbuf_reset(&log_context);
|
||||||
|
|
||||||
if (call_stats.totals)
|
if (call_stats.totals)
|
||||||
fd_func_exit(__HERE__, &call_stats);
|
fd_func_exit(__HERE__, &call_stats);
|
||||||
|
|
||||||
|
41
log.c
41
log.c
@ -101,6 +101,11 @@ static time_t _log_file_start_time;
|
|||||||
static char _log_file_buf[8192];
|
static char _log_file_buf[8192];
|
||||||
static struct strbuf _log_file_strbuf = STRUCT_STRBUF_EMPTY;
|
static struct strbuf _log_file_strbuf = STRUCT_STRBUF_EMPTY;
|
||||||
|
|
||||||
|
/* The log context is a string that can be set as a prefix to all subsequent log messages.
|
||||||
|
*/
|
||||||
|
static char _log_context[16];
|
||||||
|
struct strbuf log_context = STRUCT_STRBUF_INIT_STATIC(_log_context);
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
/* Static variables for sending log output to the Android log.
|
/* Static variables for sending log output to the Android log.
|
||||||
*
|
*
|
||||||
@ -206,6 +211,28 @@ static void _log_prefix_level(_log_iterator *it, int level)
|
|||||||
xprintf(it->xpf, "%-6.6s", levelstr);
|
xprintf(it->xpf, "%-6.6s", levelstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _log_prefix_context(_log_iterator *it)
|
||||||
|
{
|
||||||
|
if (it->config->show_pid)
|
||||||
|
xprintf(it->xpf, "[%5u] ", getpid());
|
||||||
|
if (it->config->show_time) {
|
||||||
|
if (it->tv.tv_sec == 0) {
|
||||||
|
xputs("NOTIME______ ", it->xpf);
|
||||||
|
} else {
|
||||||
|
char buf[50];
|
||||||
|
if (strftime(buf, sizeof buf, "%T", &it->tm) == 0)
|
||||||
|
xputs("EMPTYTIME___ ", it->xpf);
|
||||||
|
else
|
||||||
|
xprintf(it->xpf, "%s.%03u ", buf, (unsigned int)it->tv.tv_usec / 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_log_context[0]) {
|
||||||
|
xputs("[", it->xpf);
|
||||||
|
xputs(_log_context, it->xpf);
|
||||||
|
xputs("] ", it->xpf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void _log_prefix(_log_iterator *it, int level)
|
static void _log_prefix(_log_iterator *it, int level)
|
||||||
{
|
{
|
||||||
if (it->config == &config_file) {
|
if (it->config == &config_file) {
|
||||||
@ -228,19 +255,7 @@ static void _log_prefix(_log_iterator *it, int level)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
abort();
|
abort();
|
||||||
if (it->config->show_pid)
|
_log_prefix_context(it);
|
||||||
xprintf(it->xpf, "[%5u] ", getpid());
|
|
||||||
if (it->config->show_time) {
|
|
||||||
if (it->tv.tv_sec == 0) {
|
|
||||||
xputs("NOTIME______ ", it->xpf);
|
|
||||||
} else {
|
|
||||||
char buf[50];
|
|
||||||
if (strftime(buf, sizeof buf, "%T", &it->tm) == 0)
|
|
||||||
xputs("EMPTYTIME___ ", it->xpf);
|
|
||||||
else
|
|
||||||
xprintf(it->xpf, "%s.%03u ", buf, (unsigned int)it->tv.tv_usec / 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _log_prefix_whence(_log_iterator *it, struct __sourceloc whence)
|
static void _log_prefix_whence(_log_iterator *it, struct __sourceloc whence)
|
||||||
|
4
log.h
4
log.h
@ -54,6 +54,10 @@ void disable_log_stderr();
|
|||||||
void logFlush();
|
void logFlush();
|
||||||
void logConfigChanged();
|
void logConfigChanged();
|
||||||
|
|
||||||
|
// Logging context string.
|
||||||
|
struct strbuf;
|
||||||
|
extern struct strbuf log_context;
|
||||||
|
|
||||||
// Logging primitives.
|
// Logging primitives.
|
||||||
void vlogMessage(int level, struct __sourceloc whence, const char *fmt, va_list);
|
void vlogMessage(int level, struct __sourceloc whence, const char *fmt, va_list);
|
||||||
int logBacktrace(int level, struct __sourceloc whence);
|
int logBacktrace(int level, struct __sourceloc whence);
|
||||||
|
27
log_context.c
Normal file
27
log_context.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
Serval DNA logging
|
||||||
|
Copyright 2015 Serval Project Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This compilation unit provides an initialised log_context strbuf for clients that do not provide
|
||||||
|
// their own.
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "strbuf.h"
|
||||||
|
|
||||||
|
static char _log_context[16];
|
||||||
|
struct strbuf log_context = STRUCT_STRBUF_INIT_STATIC(_log_context);
|
@ -34,6 +34,7 @@ SERVAL_CLIENT_SOURCES = \
|
|||||||
# These objects do not belong in the Serval DNA daemon but are available for
|
# These objects do not belong in the Serval DNA daemon but are available for
|
||||||
# client applications.
|
# client applications.
|
||||||
SERVAL_LIB_SOURCES = \
|
SERVAL_LIB_SOURCES = \
|
||||||
|
log_context.c \
|
||||||
log_stderr.c
|
log_stderr.c
|
||||||
|
|
||||||
# These source files are imported and do not depend on any local header files.
|
# These source files are imported and do not depend on any local header files.
|
||||||
@ -107,6 +108,7 @@ TEST_SOURCES = \
|
|||||||
commandline.c \
|
commandline.c \
|
||||||
main.c \
|
main.c \
|
||||||
test_cli.c \
|
test_cli.c \
|
||||||
|
log_context.c \
|
||||||
log_stderr.c \
|
log_stderr.c \
|
||||||
context1.c
|
context1.c
|
||||||
|
|
||||||
|
14
strbuf.h
14
strbuf.h
@ -110,6 +110,20 @@ struct strbuf {
|
|||||||
*/
|
*/
|
||||||
#define STRUCT_STRBUF_EMPTY ((struct strbuf){NULL, NULL, NULL})
|
#define STRUCT_STRBUF_EMPTY ((struct strbuf){NULL, NULL, NULL})
|
||||||
|
|
||||||
|
/* Constant for initialising a struct strbuf to a static backing buffer:
|
||||||
|
* char buf[n];
|
||||||
|
* struct strbuf ssb = STRUCT_STRBUF_INIT_STATIC(buf);
|
||||||
|
* Immediately following this assignment, the following properties hold:
|
||||||
|
* strbuf_is_empty(&ssb)
|
||||||
|
* strbuf_len(&ssb) == 0
|
||||||
|
* strbuf_count(&ssb) == 0
|
||||||
|
* strbuf_str(&ssb) == buf
|
||||||
|
* strbuf_size(sb) == n
|
||||||
|
*
|
||||||
|
* @author Andrew Bettison <andrew@servalproject.com>
|
||||||
|
*/
|
||||||
|
#define STRUCT_STRBUF_INIT_STATIC(B) ((struct strbuf){(B), (B) + sizeof(B) - 1, (B)})
|
||||||
|
|
||||||
typedef struct strbuf *strbuf;
|
typedef struct strbuf *strbuf;
|
||||||
typedef const struct strbuf *const_strbuf;
|
typedef const struct strbuf *const_strbuf;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user