"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"
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) {
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);
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;
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, ...)
{
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)
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);
}
#include <syslog.h>
#include "lib/defines.h"
+
+#define LOG_DEFAULT_LEVEL LOG_WARNING
+
typedef int log_level_t;
typedef enum {
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__)
#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