mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-24 15:29:45 +03:00
use nslog library for logging if available.
This commit is contained in:
parent
f8cdbbce19
commit
8d9b2efc11
6
Makefile
6
Makefile
@ -537,6 +537,7 @@ NETSURF_FEATURE_NSSVG_CFLAGS := -DWITH_NS_SVG
|
||||
NETSURF_FEATURE_OPENSSL_CFLAGS := -DWITH_OPENSSL
|
||||
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
|
||||
NETSURF_FEATURE_NSPSL_CFLAGS := -DWITH_NSPSL
|
||||
NETSURF_FEATURE_NSLOG_CFLAGS := -DWITH_NSLOG
|
||||
|
||||
# libcurl and openssl ordering matters as if libcurl requires ssl it
|
||||
# needs to come first in link order to ensure its symbols can be
|
||||
@ -557,6 +558,7 @@ $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF))
|
||||
$(eval $(call pkg_config_find_and_add_enabled,NSSVG,libsvgtiny,SVG))
|
||||
$(eval $(call pkg_config_find_and_add_enabled,ROSPRITE,librosprite,Sprite))
|
||||
$(eval $(call pkg_config_find_and_add_enabled,NSPSL,libnspsl,PSL))
|
||||
$(eval $(call pkg_config_find_and_add_enabled,NSLOG,libnslog,LOG))
|
||||
|
||||
# List of directories in which headers are searched for
|
||||
INCLUDE_DIRS :=. include $(OBJROOT)
|
||||
@ -569,6 +571,10 @@ CXXFLAGS += -DNETSURF_UA_FORMAT_STRING=\"$(NETSURF_UA_FORMAT_STRING)\"
|
||||
CFLAGS += -DNETSURF_HOMEPAGE=\"$(NETSURF_HOMEPAGE)\"
|
||||
CXXFLAGS += -DNETSURF_HOMEPAGE=\"$(NETSURF_HOMEPAGE)\"
|
||||
|
||||
# set the logging level
|
||||
CFLAGS += -DNETSURF_LOG_LEVEL=$(NETSURF_LOG_LEVEL)
|
||||
CXXFLAGS += -DNETSURF_LOG_LEVEL=$(NETSURF_LOG_LEVEL)
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# General make rules
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -70,8 +70,16 @@ NETSURF_USE_DUKTAPE := YES
|
||||
NETSURF_USE_HARU_PDF := NO
|
||||
|
||||
# Enable the use of the Public suffix library to detect supercookies
|
||||
# Valid options: YES, NO, AUTO (highly recommended)
|
||||
NETSURF_USE_NSPSL := AUTO
|
||||
|
||||
# Enable use of filtered logging library
|
||||
# Valid options: YES, NO, AUTO (highly recommended)
|
||||
NETSURF_USE_NSLOG := AUTO
|
||||
# The minimum logging level *compiled* into netsurf
|
||||
# Valid options are: DEEPDEBUG, DEBUG, VERBOSE, INFO, WARNING, ERROR, CRITICAL
|
||||
NETSURF_LOG_LEVEL := INFO
|
||||
|
||||
# Enable stripping the NetSurf binary
|
||||
# Valid options: YES, NO
|
||||
NETSURF_STRIP_BINARY := NO
|
||||
|
@ -26,11 +26,13 @@
|
||||
#define DUKKY_H
|
||||
|
||||
#ifdef JS_DEBUG
|
||||
# define JS_LOG(format, args...) LOG(format , ##args)
|
||||
# define JS_LOG(format, args...) NSLOG(netsurf, INFO, format , ##args)
|
||||
#else
|
||||
# define JS_LOG(format, ...) ((void) 0)
|
||||
#endif
|
||||
|
||||
#define LOG(format, args...) NSLOG(netsurf, INFO, format , ##args)
|
||||
|
||||
duk_ret_t dukky_create_object(duk_context *ctx, const char *name, int args);
|
||||
duk_bool_t dukky_push_node_stacked(duk_context *ctx);
|
||||
duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
|
||||
|
12
test/log.c
12
test/log.c
@ -42,13 +42,15 @@ void nslog_log(const char *file, const char *func, int ln, const char *format, .
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
fprintf(stderr, "%s:%i %s: ", file, ln, func);
|
||||
if (verbose_log) {
|
||||
fprintf(stderr, "%s:%i %s: ", file, ln, func);
|
||||
|
||||
va_start(ap, format);
|
||||
va_start(ap, format);
|
||||
|
||||
vfprintf(stderr, format, ap);
|
||||
vfprintf(stderr, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
va_end(ap);
|
||||
|
||||
fputc('\n', stderr);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
}
|
||||
|
237
utils/log.c
237
utils/log.c
@ -36,91 +36,15 @@ bool verbose_log = false;
|
||||
/** The stream to which logging is sent */
|
||||
static FILE *logfile;
|
||||
|
||||
nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv)
|
||||
{
|
||||
struct utsname utsname;
|
||||
nserror ret = NSERROR_OK;
|
||||
|
||||
if (((*pargc) > 1) &&
|
||||
(argv[1][0] == '-') &&
|
||||
(argv[1][1] == 'v') &&
|
||||
(argv[1][2] == 0)) {
|
||||
int argcmv;
|
||||
|
||||
/* verbose logging to stderr */
|
||||
logfile = stderr;
|
||||
|
||||
/* remove -v from argv list */
|
||||
for (argcmv = 2; argcmv < (*pargc); argcmv++) {
|
||||
argv[argcmv - 1] = argv[argcmv];
|
||||
}
|
||||
(*pargc)--;
|
||||
|
||||
/* ensure we actually show logging */
|
||||
verbose_log = true;
|
||||
} else if (((*pargc) > 2) &&
|
||||
(argv[1][0] == '-') &&
|
||||
(argv[1][1] == 'V') &&
|
||||
(argv[1][2] == 0)) {
|
||||
int argcmv;
|
||||
|
||||
/* verbose logging to file */
|
||||
logfile = fopen(argv[2], "a+");
|
||||
|
||||
/* remove -V and filename from argv list */
|
||||
for (argcmv = 3; argcmv < (*pargc); argcmv++) {
|
||||
argv[argcmv - 2] = argv[argcmv];
|
||||
}
|
||||
(*pargc) -= 2;
|
||||
|
||||
if (logfile == NULL) {
|
||||
/* could not open log file for output */
|
||||
ret = NSERROR_NOT_FOUND;
|
||||
verbose_log = false;
|
||||
} else {
|
||||
|
||||
/* ensure we actually show logging */
|
||||
verbose_log = true;
|
||||
}
|
||||
} else if (verbose_log == true) {
|
||||
/* default is logging to stderr */
|
||||
logfile = stderr;
|
||||
}
|
||||
|
||||
/* ensure output file handle is correctly configured */
|
||||
if ((verbose_log == true) &&
|
||||
(ensure != NULL) &&
|
||||
(ensure(logfile) == false)) {
|
||||
/* failed to ensure output configuration */
|
||||
ret = NSERROR_INIT_FAILED;
|
||||
verbose_log = false;
|
||||
}
|
||||
|
||||
/* sucessfull logging initialisation so log system info */
|
||||
if (ret == NSERROR_OK) {
|
||||
LOG("NetSurf version '%s'", netsurf_version);
|
||||
if (uname(&utsname) < 0) {
|
||||
LOG("Failed to extract machine information");
|
||||
} else {
|
||||
LOG("NetSurf on <%s>, node <%s>, release <%s>, version <%s>, machine <%s>",
|
||||
utsname.sysname,
|
||||
utsname.nodename,
|
||||
utsname.release,
|
||||
utsname.version,
|
||||
utsname.machine);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
/* Subtract the `struct timeval' values X and Y,
|
||||
storing the result in RESULT.
|
||||
Return 1 if the difference is negative, otherwise 0.
|
||||
*/
|
||||
NSLOG_DEFINE_CATEGORY(netsurf, "NetSurf default logging");
|
||||
|
||||
/** Subtract the `struct timeval' values X and Y
|
||||
*
|
||||
* \param result The timeval structure to store the result in
|
||||
* \param x The first value
|
||||
* \param y The second value
|
||||
* \return 1 if the difference is negative, otherwise 0.
|
||||
*/
|
||||
static int
|
||||
timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y)
|
||||
{
|
||||
@ -166,24 +90,151 @@ static const char *nslog_gettime(void)
|
||||
timeval_subtract(&tv, &now_tv, &start_tv);
|
||||
|
||||
snprintf(buff, sizeof(buff),"(%ld.%06ld)",
|
||||
(long)tv.tv_sec, (long)tv.tv_usec);
|
||||
(long)tv.tv_sec, (long)tv.tv_usec);
|
||||
|
||||
return buff;
|
||||
}
|
||||
|
||||
void nslog_log(const char *file, const char *func, int ln, const char *format, ...)
|
||||
#ifdef WITH_NSLOG
|
||||
|
||||
static void
|
||||
netsurf_render_log(void *_ctx,
|
||||
nslog_entry_context_t *ctx,
|
||||
const char *fmt,
|
||||
va_list args)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
fprintf(logfile, "%s %s:%i %s: ", nslog_gettime(), file, ln, func);
|
||||
fprintf(logfile,
|
||||
"%s %.*s:%i %.*s: ",
|
||||
nslog_gettime(),
|
||||
ctx->filenamelen,
|
||||
ctx->filename,
|
||||
ctx->lineno,
|
||||
ctx->funcnamelen,
|
||||
ctx->funcname);
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
vfprintf(logfile, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
vfprintf(logfile, fmt, args);
|
||||
|
||||
/* Log entries aren't newline terminated add one for clarity */
|
||||
fputc('\n', logfile);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void
|
||||
nslog_log(const char *file, const char *func, int ln, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (verbose_log) {
|
||||
fprintf(logfile,
|
||||
"%s %s:%i %s: ",
|
||||
nslog_gettime(),
|
||||
file,
|
||||
ln,
|
||||
func);
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
vfprintf(logfile, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
fputc('\n', logfile);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv)
|
||||
{
|
||||
struct utsname utsname;
|
||||
nserror ret = NSERROR_OK;
|
||||
|
||||
if (((*pargc) > 1) &&
|
||||
(argv[1][0] == '-') &&
|
||||
(argv[1][1] == 'v') &&
|
||||
(argv[1][2] == 0)) {
|
||||
int argcmv;
|
||||
|
||||
/* verbose logging to stderr */
|
||||
logfile = stderr;
|
||||
|
||||
/* remove -v from argv list */
|
||||
for (argcmv = 2; argcmv < (*pargc); argcmv++) {
|
||||
argv[argcmv - 1] = argv[argcmv];
|
||||
}
|
||||
(*pargc)--;
|
||||
|
||||
/* ensure we actually show logging */
|
||||
verbose_log = true;
|
||||
} else if (((*pargc) > 2) &&
|
||||
(argv[1][0] == '-') &&
|
||||
(argv[1][1] == 'V') &&
|
||||
(argv[1][2] == 0)) {
|
||||
int argcmv;
|
||||
|
||||
/* verbose logging to file */
|
||||
logfile = fopen(argv[2], "a+");
|
||||
|
||||
/* remove -V and filename from argv list */
|
||||
for (argcmv = 3; argcmv < (*pargc); argcmv++) {
|
||||
argv[argcmv - 2] = argv[argcmv];
|
||||
}
|
||||
(*pargc) -= 2;
|
||||
|
||||
if (logfile == NULL) {
|
||||
/* could not open log file for output */
|
||||
ret = NSERROR_NOT_FOUND;
|
||||
verbose_log = false;
|
||||
} else {
|
||||
|
||||
/* ensure we actually show logging */
|
||||
verbose_log = true;
|
||||
}
|
||||
} else if (verbose_log == true) {
|
||||
/* default is logging to stderr */
|
||||
logfile = stderr;
|
||||
}
|
||||
|
||||
/* ensure output file handle is correctly configured */
|
||||
if ((verbose_log == true) &&
|
||||
(ensure != NULL) &&
|
||||
(ensure(logfile) == false)) {
|
||||
/* failed to ensure output configuration */
|
||||
ret = NSERROR_INIT_FAILED;
|
||||
verbose_log = false;
|
||||
}
|
||||
|
||||
#ifdef WITH_NSLOG
|
||||
|
||||
if (nslog_set_render_callback(netsurf_render_log, NULL) != NSLOG_NO_ERROR) {
|
||||
ret = NSERROR_INIT_FAILED;
|
||||
verbose_log = false;
|
||||
|
||||
} else if (nslog_uncork() != NSLOG_NO_ERROR) {
|
||||
ret = NSERROR_INIT_FAILED;
|
||||
verbose_log = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* sucessfull logging initialisation so log system info */
|
||||
if (ret == NSERROR_OK) {
|
||||
NSLOG(netsurf, INFO, "NetSurf version '%s'", netsurf_version);
|
||||
if (uname(&utsname) < 0) {
|
||||
NSLOG(netsurf, INFO,
|
||||
"Failed to extract machine information");
|
||||
} else {
|
||||
NSLOG(netsurf, INFO,
|
||||
"NetSurf on <%s>, node <%s>, release <%s>, version <%s>, machine <%s>",
|
||||
utsname.sysname,
|
||||
utsname.nodename,
|
||||
utsname.release,
|
||||
utsname.version,
|
||||
utsname.machine);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
42
utils/log.h
42
utils/log.h
@ -17,8 +17,8 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_LOG_H_
|
||||
#define _NETSURF_LOG_H_
|
||||
#ifndef NETSURF_LOG_H
|
||||
#define NETSURF_LOG_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
@ -43,9 +43,31 @@ typedef bool(nslog_ensure_t)(FILE *fptr);
|
||||
*/
|
||||
extern nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv);
|
||||
|
||||
#ifdef NDEBUG
|
||||
# define LOG(format, ...) ((void) 0)
|
||||
#else
|
||||
#ifndef NETSURF_LOG_LEVEL
|
||||
#define NETSURF_LOG_LEVEL INFO
|
||||
#endif
|
||||
|
||||
#define NSLOG_LVL(level) NSLOG_LEVEL_ ## level
|
||||
#define NSLOG_EVL(level) NSLOG_LVL(level)
|
||||
#define NSLOG_COMPILED_MIN_LEVEL NSLOG_EVL(NETSURF_LOG_LEVEL)
|
||||
|
||||
#ifdef WITH_NSLOG
|
||||
|
||||
#include <nslog/nslog.h>
|
||||
|
||||
NSLOG_DECLARE_CATEGORY(netsurf);
|
||||
|
||||
#else /* WITH_NSLOG */
|
||||
|
||||
enum nslog_level {
|
||||
NSLOG_LEVEL_DEEPDEBUG = 0,
|
||||
NSLOG_LEVEL_DEBUG = 1,
|
||||
NSLOG_LEVEL_VERBOSE = 2,
|
||||
NSLOG_LEVEL_INFO = 3,
|
||||
NSLOG_LEVEL_WARNING = 4,
|
||||
NSLOG_LEVEL_ERROR = 5,
|
||||
NSLOG_LEVEL_CRITICAL = 6
|
||||
};
|
||||
|
||||
extern void nslog_log(const char *file, const char *func, int ln, const char *format, ...) __attribute__ ((format (printf, 4, 5)));
|
||||
|
||||
@ -60,13 +82,15 @@ extern void nslog_log(const char *file, const char *func, int ln, const char *fo
|
||||
# define LOG_LN __LINE__
|
||||
# endif
|
||||
|
||||
#define LOG(format, args...) \
|
||||
#define NSLOG(catname, level, logmsg, args...) \
|
||||
do { \
|
||||
if (verbose_log) { \
|
||||
nslog_log(__FILE__, LOG_FN, LOG_LN, format , ##args); \
|
||||
if (NSLOG_LEVEL_##level >= NSLOG_COMPILED_MIN_LEVEL) { \
|
||||
nslog_log(__FILE__, LOG_FN, LOG_LN, logmsg , ##args); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
#define NSLOG_DEFINE_CATEGORY(catname, description)
|
||||
|
||||
#endif /* WITH_NSLOG */
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user