Skip to content
Snippets Groups Projects
Verified Commit ae3f586c authored by Lukas Jezek's avatar Lukas Jezek Committed by Tomas Krizek
Browse files

log: lua interface

parent c1cb8c56
No related branches found
No related tags found
1 merge request!1181Fine grained logging
......@@ -74,6 +74,7 @@ static int l_help(lua_State *L)
"package_version()\n return package version\n"
"user(name[, group])\n change process user (and group)\n"
"verbose(true|false)\n toggle verbose mode\n"
"set_log_level\n logging level (crit, err, warning, notice, info or debug)\n"
"option(opt[, new_val])\n get/set server option\n"
"mode(strict|normal|permissive)\n set resolver strictness level\n"
"reorder_RR([true|false])\n set/get reordering of RRs within RRsets\n"
......@@ -152,6 +153,26 @@ static int l_verbose(lua_State *L)
return 1;
}
static int l_set_log_level(lua_State *L)
{
if (lua_gettop(L) != 1 || !lua_isstring(L, 1)) {
lua_error_p(L, "takes one string parameter");
return 0;
}
log_level_t lvl = kr_log_name2level(lua_tostring(L, 1));
lua_pushinteger(L, kr_log_level_set(lvl));
return 1;
}
static int l_get_log_level(lua_State *L)
{
printf("%s\n", kr_log_level2name(kr_log_level_get()));
return 0;
}
char *engine_get_hostname(struct engine *engine) {
static char hostname_str[KNOT_DNAME_MAXLEN];
if (!engine) {
......@@ -432,6 +453,10 @@ static int init_state(struct engine *engine)
lua_setglobal(engine->L, "package_version");
lua_pushcfunction(engine->L, l_verbose);
lua_setglobal(engine->L, "verbose");
lua_pushcfunction(engine->L, l_set_log_level);
lua_setglobal(engine->L, "set_log_level");
lua_pushcfunction(engine->L, l_get_log_level);
lua_setglobal(engine->L, "get_log_level");
lua_pushcfunction(engine->L, l_setuser);
lua_setglobal(engine->L, "user");
lua_pushcfunction(engine->L, l_hint_root_file);
......
......@@ -422,7 +422,7 @@ int main(int argc, char **argv)
the_args = &the_args_value;
args_init(the_args);
kr_log_init(LOG_WARNING, LOG_TARGET_STDOUT);
kr_log_init(LOG_DEFAULT_LEVEL, LOG_TARGET_STDOUT);
int ret = parse_args(argc, argv, the_args);
if (ret >= 0) goto cleanup_args;
......
......@@ -18,7 +18,19 @@ int use_journal = 0;
log_level_t kr_log_level = LOG_CRIT;
log_target_t kr_log_target = LOG_TARGET_STDOUT;
#ifndef SYSLOG_NAMES
syslog_code_t prioritynames[] = {
{ "alert", LOG_ALERT },
{ "crit", LOG_CRIT },
{ "debug", LOG_DEBUG },
{ "emerg", LOG_EMERG },
{ "err", LOG_ERR },
{ "info", LOG_INFO },
{ "notice", LOG_NOTICE },
{ "warning", LOG_WARNING },
{ NULL, -1 },
};
#endif
void kr_log_fmt(log_level_t level, const char *fmt, ...)
{
......@@ -66,6 +78,28 @@ static void kres_gnutls_log(int level, const char *message)
kr_log_debug("[gnutls] (%d) %s", level, message);
}
char *kr_log_level2name(log_level_t level)
{
for (int i = 0; prioritynames[i].c_name; ++i)
{
if (prioritynames[i].c_val == level)
return prioritynames[i].c_name;
}
return NULL;
}
log_level_t kr_log_name2level(const char *name)
{
for (int i = 0; prioritynames[i].c_name; ++i)
{
if (strcmp(prioritynames[i].c_name, name) == 0)
return prioritynames[i].c_val;
}
return -1;
}
int kr_log_level_set(log_level_t level)
{
if (level < LOG_CRIT || level > LOG_DEBUG)
......@@ -93,13 +127,12 @@ log_level_t kr_log_level_get(void)
void kr_log_init(log_level_t level, log_target_t target)
{
kr_log_level = level;
kr_log_target = target;
#if ENABLE_LIBSYSTEMD
use_journal = sd_booted();
#endif
openlog(NULL, LOG_PID, LOG_DAEMON);
setlogmask(LOG_UPTO(kr_log_level));
kr_log_level_set(level);
}
......@@ -8,6 +8,9 @@
#include <syslog.h>
#include "lib/defines.h"
#define LOG_DEFAULT_LEVEL LOG_WARNING
typedef int log_level_t;
typedef enum {
......@@ -28,6 +31,10 @@ KR_EXPORT
log_level_t kr_log_level_get(void);
KR_EXPORT
void kr_log_init(log_level_t level, log_target_t target);
KR_EXPORT
char *kr_log_level2name(log_level_t level);
KR_EXPORT
log_level_t kr_log_name2level(const char *name);
#define kr_log_debug(fmt, ...) kr_log_fmt(LOG_DEBUG, fmt, ## __VA_ARGS__)
#define kr_log_info(fmt, ...) kr_log_fmt(LOG_INFO, fmt, ## __VA_ARGS__)
......@@ -39,3 +46,14 @@ void kr_log_init(log_level_t level, log_target_t target);
#define kr_log_deprecate(fmt, ...) kr_log_fmt(LOG_WARNING, "deprecation WARNING: " fmt, ## __VA_ARGS__)
#define KR_LOG_LEVEL_IS(exp) ((kr_log_level >= (exp)) ? true : false)
#ifndef SYSLOG_NAMES
typedef struct _code {
char *c_name;
int c_val;
} syslog_code_t;
KR_EXPORT
extern syslog_code_t prioritynames[];
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment