]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Add logger.debugm to debug lua modules
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 25 Nov 2016 17:04:37 +0000 (17:04 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 25 Nov 2016 17:04:37 +0000 (17:04 +0000)
src/lua/lua_logger.c

index c981a35bfe9c3d389b0e62e31b733eca0ac3aff4..4e10cc9c9f6420bec2ae72be9b32bf554dcc186d 100644 (file)
@@ -108,6 +108,16 @@ LUA_FUNCTION_DEF (logger, infox);
  * @param {any} args list of arguments to be replaced in %<number> positions
  */
 LUA_FUNCTION_DEF (logger, debugx);
+
+/***
+ * @function logger.debugm(module, id, fmt[, args)
+ * Extended interface to make a debug log message
+ * @param {string} module debug module
+ * @param {task|cfg|pool|string} id id to log
+ * @param {string} fmt format string, arguments are encoded as %<number>
+ * @param {any} args list of arguments to be replaced in %<number> positions
+ */
+LUA_FUNCTION_DEF (logger, debugm);
 /***
  * @function logger.slog(fmt[, args)
  * Create string replacing percent params with corresponding arguments
@@ -126,6 +136,7 @@ static const struct luaL_reg loggerlib_f[] = {
                LUA_INTERFACE_DEF (logger, warnx),
                LUA_INTERFACE_DEF (logger, infox),
                LUA_INTERFACE_DEF (logger, debugx),
+               LUA_INTERFACE_DEF (logger, debugm),
                LUA_INTERFACE_DEF (logger, slog),
                {"__tostring", rspamd_lua_class_tostring},
                {NULL, NULL}
@@ -705,6 +716,38 @@ lua_logger_debugx (lua_State *L)
        return lua_logger_logx (L, G_LOG_LEVEL_DEBUG, FALSE);
 }
 
+static gint
+lua_logger_debugm (lua_State *L)
+{
+       gchar logbuf[RSPAMD_LOGBUF_SIZE - 128];
+       const gchar *uid = NULL, *module = NULL;
+       gboolean ret;
+
+       module = luaL_checkstring (L, 1);
+
+       if (lua_type (L, 2) == LUA_TSTRING) {
+               uid = luaL_checkstring (L, 2);
+       }
+       else {
+               uid = lua_logger_get_id (L, 2);
+       }
+
+       if (uid && module && lua_type (L, 3) == LUA_TSTRING) {
+               ret = lua_logger_log_format (L, 3, FALSE, logbuf, sizeof (logbuf) - 1);
+
+               if (ret) {
+                       lua_common_log_line (G_LOG_LEVEL_DEBUG, L, logbuf, uid, module);
+               }
+       }
+       else {
+               return luaL_error (L, "invalid arguments");
+       }
+
+       return 0;
+}
+
+
+
 static gint
 lua_logger_slog (lua_State *L)
 {