suricata
util-lua-log.c
Go to the documentation of this file.
1 /* Copyright (C) 2025 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 #include "suricata-common.h"
19 #include "util-lua-log.h"
20 #include "util-lua.h"
21 #include "util-debug.h"
22 
23 #include "lauxlib.h"
24 
25 static bool LuaGetAr(lua_State *L, lua_Debug *ar)
26 {
27  return lua_getstack(L, 1, ar) && lua_getinfo(L, "nSl", ar);
28 }
29 
30 static int LuaLogInfo(lua_State *L)
31 {
32  const char *msg = luaL_checkstring(L, 1);
33  lua_Debug ar;
34  if (LuaGetAr(L, &ar)) {
35  const char *funcname = ar.name ? ar.name : ar.what;
36  SCLogInfoRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
37  } else {
38  SCLogInfo("%s", msg);
39  }
40  return 0;
41 }
42 
43 static int LuaLogNotice(lua_State *L)
44 {
45  const char *msg = luaL_checkstring(L, 1);
46  lua_Debug ar;
47  if (LuaGetAr(L, &ar)) {
48  const char *funcname = ar.name ? ar.name : ar.what;
49  SCLogNoticeRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
50  } else {
51  SCLogNotice("%s", msg);
52  }
53 
54  return 0;
55 }
56 
57 static int LuaLogWarning(lua_State *L)
58 {
59  const char *msg = luaL_checkstring(L, 1);
60  lua_Debug ar;
61  if (LuaGetAr(L, &ar)) {
62  const char *funcname = ar.name ? ar.name : ar.what;
63  SCLogWarningRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
64  } else {
65  SCLogWarning("%s", msg);
66  }
67  return 0;
68 }
69 
70 static int LuaLogError(lua_State *L)
71 {
72  const char *msg = luaL_checkstring(L, 1);
73  lua_Debug ar;
74  if (LuaGetAr(L, &ar)) {
75  const char *funcname = ar.name ? ar.name : ar.what;
76  SCLogErrorRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
77  } else {
78  SCLogError("%s", msg);
79  }
80  return 0;
81 }
82 
83 static int LuaLogDebug(lua_State *L)
84 {
85 #ifdef DEBUG
86  const char *msg = luaL_checkstring(L, 1);
87  lua_Debug ar;
88  if (LuaGetAr(L, &ar)) {
89  const char *funcname = ar.name ? ar.name : ar.what;
90  SCLogDebugRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
91  } else {
92  SCLogDebug("%s", msg);
93  }
94 #endif
95  return 0;
96 }
97 
98 static int LuaLogConfig(lua_State *L)
99 {
100  const char *msg = luaL_checkstring(L, 1);
101  lua_Debug ar;
102  if (LuaGetAr(L, &ar)) {
103  const char *funcname = ar.name ? ar.name : ar.what;
104  SCLogConfigRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
105  } else {
106  SCLogConfig("%s", msg);
107  }
108  return 0;
109 }
110 
111 static int LuaLogPerf(lua_State *L)
112 {
113  const char *msg = luaL_checkstring(L, 1);
114  lua_Debug ar;
115  if (LuaGetAr(L, &ar)) {
116  const char *funcname = ar.name ? ar.name : ar.what;
117  SCLogPerfRaw(ar.short_src, funcname, ar.currentline, "%s", msg);
118  } else {
119  SCLogPerf("%s", msg);
120  }
121  return 0;
122 }
123 
124 static const struct luaL_Reg loglib[] = {
125  // clang-format off
126  { "info", LuaLogInfo },
127  { "notice", LuaLogNotice },
128  { "warning", LuaLogWarning },
129  { "error", LuaLogError },
130  { "debug", LuaLogDebug },
131  { "config", LuaLogConfig },
132  { "perf", LuaLogPerf },
133  { NULL, NULL }
134  // clang-format on
135 };
136 
138 {
139  luaL_newlib(L, loglib);
140  return 1;
141 }
util-lua-log.h
SCLogWarningRaw
#define SCLogWarningRaw(file, func, line,...)
Definition: util-debug.h:264
SCLogConfigRaw
#define SCLogConfigRaw(file, func, line,...)
Definition: util-debug.h:238
SCLogDebug
#define SCLogDebug(...)
Definition: util-debug.h:282
util-lua.h
SCLogPerfRaw
#define SCLogPerfRaw(file, func, line,...)
Definition: util-debug.h:242
SCLuaLoadLogLib
int SCLuaLoadLogLib(lua_State *L)
Definition: util-lua-log.c:137
lua_State
struct lua_State lua_State
Definition: suricata-common.h:523
util-debug.h
SCLogWarning
#define SCLogWarning(...)
Macro used to log WARNING messages.
Definition: util-debug.h:262
SCLogInfo
#define SCLogInfo(...)
Macro used to log INFORMATIONAL messages.
Definition: util-debug.h:232
suricata-common.h
SCLogPerf
#define SCLogPerf(...)
Definition: util-debug.h:241
SCLogConfig
struct SCLogConfig_ SCLogConfig
Holds the config state used by the logging api.
SCLogError
#define SCLogError(...)
Macro used to log ERROR messages.
Definition: util-debug.h:274
SCLogNoticeRaw
#define SCLogNoticeRaw(file, func, line,...)
Definition: util-debug.h:252
SCLogInfoRaw
#define SCLogInfoRaw(file, func, line,...)
Definition: util-debug.h:233
SCLogErrorRaw
#define SCLogErrorRaw(file, func, line,...)
Definition: util-debug.h:276
SCLogNotice
#define SCLogNotice(...)
Macro used to log NOTICE messages.
Definition: util-debug.h:250