Skip to content

Commit 6bd7ff3

Browse files
committed
feat: add configurable syslog severity level filter
Add rsyslog_level field to NetworkConfig protobuf and wire it to the existing Syslog::logMask() filtering mechanism. Users can now control which log messages are forwarded to the rsyslog server by severity. Changes: - Add LogLevel enum and rsyslog_level field (tag 12) to NetworkConfig in config.proto and generated nanopb files - Add syslogLevelToMask() helper in DebugConfiguration.h to map config values to syslog LOG_UPTO() bitmasks - Apply the configured log mask during syslog initialization in both ethClient.cpp (Ethernet) and WiFiAPClient.cpp (WiFi) Default behavior: UNSET (0) is treated as INFO, filtering out DEBUG messages. This reduces syslog noise for production deployments. Companion protobuf PR: meshtastic/protobufs#870 Made-with: Cursor
1 parent abcc9cc commit 6bd7ff3

File tree

4 files changed

+56
-5
lines changed

4 files changed

+56
-5
lines changed

src/DebugConfiguration.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,4 +199,23 @@ class Syslog
199199

200200
}; // namespace meshtastic
201201

202+
inline uint8_t syslogLevelToMask(int configLevel)
203+
{
204+
switch (configLevel) {
205+
case 5: // meshtastic_Config_NetworkConfig_LogLevel_LOG_TRACE
206+
case 10: // meshtastic_Config_NetworkConfig_LogLevel_LOG_DEBUG
207+
return LOG_UPTO(SYSLOG_DEBUG);
208+
case 30: // meshtastic_Config_NetworkConfig_LogLevel_LOG_WARNING
209+
return LOG_UPTO(SYSLOG_WARN);
210+
case 40: // meshtastic_Config_NetworkConfig_LogLevel_LOG_ERROR
211+
return LOG_UPTO(SYSLOG_ERR);
212+
case 50: // meshtastic_Config_NetworkConfig_LogLevel_LOG_CRITICAL
213+
return LOG_UPTO(SYSLOG_CRIT);
214+
case 0: // meshtastic_Config_NetworkConfig_LogLevel_LOG_UNSET (default to INFO)
215+
case 20: // meshtastic_Config_NetworkConfig_LogLevel_LOG_INFO
216+
default:
217+
return LOG_UPTO(SYSLOG_INFO);
218+
}
219+
}
220+
202221
#endif // HAS_NETWORKING

src/mesh/eth/ethClient.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ static int32_t reconnectETH()
117117
syslog.deviceHostname(getDeviceName());
118118
syslog.appName("Meshtastic");
119119
syslog.defaultPriority(LOGLEVEL_USER);
120+
syslog.logMask(syslogLevelToMask(config.network.rsyslog_level));
120121
syslog.enable();
121122
}
122123

src/mesh/generated/meshtastic/config.pb.h

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,26 @@ typedef enum _meshtastic_Config_NetworkConfig_AddressMode {
166166
meshtastic_Config_NetworkConfig_AddressMode_STATIC = 1
167167
} meshtastic_Config_NetworkConfig_AddressMode;
168168

169+
/* Syslog log level to control which messages are sent to the rsyslog server.
170+
Only messages at or above this level will be forwarded.
171+
Values match LogRecord.Level for consistency. Default (UNSET) treats as INFO. */
172+
typedef enum _meshtastic_Config_NetworkConfig_LogLevel {
173+
/* No level set, firmware defaults to INFO */
174+
meshtastic_Config_NetworkConfig_LogLevel_LOG_UNSET = 0,
175+
/* Trace level (most verbose) */
176+
meshtastic_Config_NetworkConfig_LogLevel_LOG_TRACE = 5,
177+
/* Debug level */
178+
meshtastic_Config_NetworkConfig_LogLevel_LOG_DEBUG = 10,
179+
/* Informational */
180+
meshtastic_Config_NetworkConfig_LogLevel_LOG_INFO = 20,
181+
/* Warning conditions */
182+
meshtastic_Config_NetworkConfig_LogLevel_LOG_WARNING = 30,
183+
/* Error conditions */
184+
meshtastic_Config_NetworkConfig_LogLevel_LOG_ERROR = 40,
185+
/* Critical conditions */
186+
meshtastic_Config_NetworkConfig_LogLevel_LOG_CRITICAL = 50
187+
} meshtastic_Config_NetworkConfig_LogLevel;
188+
169189
/* Available flags auxiliary network protocols */
170190
typedef enum _meshtastic_Config_NetworkConfig_ProtocolFlags {
171191
/* Do not broadcast packets over any network protocol */
@@ -469,6 +489,9 @@ typedef struct _meshtastic_Config_NetworkConfig {
469489
uint32_t enabled_protocols;
470490
/* Enable/Disable ipv6 support */
471491
bool ipv6_enabled;
492+
/* Minimum severity level of log messages to send to the rsyslog server.
493+
Messages below this level are filtered out. Default (UNSET) sends INFO and above. */
494+
meshtastic_Config_NetworkConfig_LogLevel rsyslog_level;
472495
} meshtastic_Config_NetworkConfig;
473496

474497
/* Display Config */
@@ -666,6 +689,10 @@ extern "C" {
666689
#define _meshtastic_Config_NetworkConfig_AddressMode_MAX meshtastic_Config_NetworkConfig_AddressMode_STATIC
667690
#define _meshtastic_Config_NetworkConfig_AddressMode_ARRAYSIZE ((meshtastic_Config_NetworkConfig_AddressMode)(meshtastic_Config_NetworkConfig_AddressMode_STATIC+1))
668691

692+
#define _meshtastic_Config_NetworkConfig_LogLevel_MIN meshtastic_Config_NetworkConfig_LogLevel_LOG_UNSET
693+
#define _meshtastic_Config_NetworkConfig_LogLevel_MAX meshtastic_Config_NetworkConfig_LogLevel_LOG_CRITICAL
694+
#define _meshtastic_Config_NetworkConfig_LogLevel_ARRAYSIZE ((meshtastic_Config_NetworkConfig_LogLevel)(meshtastic_Config_NetworkConfig_LogLevel_LOG_CRITICAL+1))
695+
669696
#define _meshtastic_Config_NetworkConfig_ProtocolFlags_MIN meshtastic_Config_NetworkConfig_ProtocolFlags_NO_BROADCAST
670697
#define _meshtastic_Config_NetworkConfig_ProtocolFlags_MAX meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST
671698
#define _meshtastic_Config_NetworkConfig_ProtocolFlags_ARRAYSIZE ((meshtastic_Config_NetworkConfig_ProtocolFlags)(meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST+1))
@@ -711,6 +738,7 @@ extern "C" {
711738

712739

713740
#define meshtastic_Config_NetworkConfig_address_mode_ENUMTYPE meshtastic_Config_NetworkConfig_AddressMode
741+
#define meshtastic_Config_NetworkConfig_rsyslog_level_ENUMTYPE meshtastic_Config_NetworkConfig_LogLevel
714742

715743

716744
#define meshtastic_Config_DisplayConfig_gps_format_ENUMTYPE meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat
@@ -732,7 +760,7 @@ extern "C" {
732760
#define meshtastic_Config_DeviceConfig_init_default {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN}
733761
#define meshtastic_Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN}
734762
#define meshtastic_Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
735-
#define meshtastic_Config_NetworkConfig_init_default {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_default, "", 0, 0}
763+
#define meshtastic_Config_NetworkConfig_init_default {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_default, "", 0, 0, _meshtastic_Config_NetworkConfig_LogLevel_MIN}
736764
#define meshtastic_Config_NetworkConfig_IpV4Config_init_default {0, 0, 0, 0}
737765
#define meshtastic_Config_DisplayConfig_init_default {0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, 0, 0}
738766
#define meshtastic_Config_LoRaConfig_init_default {0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0}
@@ -743,7 +771,7 @@ extern "C" {
743771
#define meshtastic_Config_DeviceConfig_init_zero {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN}
744772
#define meshtastic_Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN}
745773
#define meshtastic_Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
746-
#define meshtastic_Config_NetworkConfig_init_zero {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_zero, "", 0, 0}
774+
#define meshtastic_Config_NetworkConfig_init_zero {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_zero, "", 0, 0, _meshtastic_Config_NetworkConfig_LogLevel_MIN}
747775
#define meshtastic_Config_NetworkConfig_IpV4Config_init_zero {0, 0, 0, 0}
748776
#define meshtastic_Config_DisplayConfig_init_zero {0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, 0, 0}
749777
#define meshtastic_Config_LoRaConfig_init_zero {0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0}
@@ -800,6 +828,7 @@ extern "C" {
800828
#define meshtastic_Config_NetworkConfig_rsyslog_server_tag 9
801829
#define meshtastic_Config_NetworkConfig_enabled_protocols_tag 10
802830
#define meshtastic_Config_NetworkConfig_ipv6_enabled_tag 11
831+
#define meshtastic_Config_NetworkConfig_rsyslog_level_tag 12
803832
#define meshtastic_Config_DisplayConfig_screen_on_secs_tag 1
804833
#define meshtastic_Config_DisplayConfig_gps_format_tag 2
805834
#define meshtastic_Config_DisplayConfig_auto_screen_carousel_secs_tag 3
@@ -934,7 +963,8 @@ X(a, STATIC, SINGULAR, UENUM, address_mode, 7) \
934963
X(a, STATIC, OPTIONAL, MESSAGE, ipv4_config, 8) \
935964
X(a, STATIC, SINGULAR, STRING, rsyslog_server, 9) \
936965
X(a, STATIC, SINGULAR, UINT32, enabled_protocols, 10) \
937-
X(a, STATIC, SINGULAR, BOOL, ipv6_enabled, 11)
966+
X(a, STATIC, SINGULAR, BOOL, ipv6_enabled, 11) \
967+
X(a, STATIC, SINGULAR, UENUM, rsyslog_level, 12)
938968
#define meshtastic_Config_NetworkConfig_CALLBACK NULL
939969
#define meshtastic_Config_NetworkConfig_DEFAULT NULL
940970
#define meshtastic_Config_NetworkConfig_ipv4_config_MSGTYPE meshtastic_Config_NetworkConfig_IpV4Config
@@ -1042,12 +1072,12 @@ extern const pb_msgdesc_t meshtastic_Config_SessionkeyConfig_msg;
10421072
#define meshtastic_Config_DisplayConfig_size 36
10431073
#define meshtastic_Config_LoRaConfig_size 85
10441074
#define meshtastic_Config_NetworkConfig_IpV4Config_size 20
1045-
#define meshtastic_Config_NetworkConfig_size 204
1075+
#define meshtastic_Config_NetworkConfig_size 206
10461076
#define meshtastic_Config_PositionConfig_size 62
10471077
#define meshtastic_Config_PowerConfig_size 52
10481078
#define meshtastic_Config_SecurityConfig_size 178
10491079
#define meshtastic_Config_SessionkeyConfig_size 0
1050-
#define meshtastic_Config_size 207
1080+
#define meshtastic_Config_size 209
10511081

10521082
#ifdef __cplusplus
10531083
} /* extern "C" */

src/mesh/wifi/WiFiAPClient.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ static void onNetworkConnected()
128128
syslog.deviceHostname(getDeviceName());
129129
syslog.appName("Meshtastic");
130130
syslog.defaultPriority(LOGLEVEL_USER);
131+
syslog.logMask(syslogLevelToMask(config.network.rsyslog_level));
131132
syslog.enable();
132133
}
133134

0 commit comments

Comments
 (0)