@@ -5,18 +5,34 @@ use datadog_log::logger;
55use datadog_log:: logger:: { logger_configure, logger_set_log_level} ;
66use ddcommon_ffi:: { CharSlice , Error } ;
77
8+ /// Validates that the log level is within the valid range (0 to 4).
9+ fn validate_log_level ( level : logger:: LogEventLevel ) -> Result < ( ) , Error > {
10+ let level_value = level as i8 ;
11+ if level_value >= 0 && level_value <= logger:: LogEventLevel :: Error as i8 {
12+ Ok ( ( ) )
13+ } else {
14+ Err ( Error :: from ( format ! (
15+ "Invalid log level: {} (must be between 0 and 4)" ,
16+ level_value
17+ ) ) )
18+ }
19+ }
20+
821/// Sets the global log level.
922///
1023/// # Arguments
1124/// * `log_level` - The minimum level for events to be logged
1225///
1326/// # Errors
14- /// Returns an error if the log level cannot be set.
27+ /// Returns an error if the log level cannot be set or if the level is invalid .
1528#[ no_mangle]
1629pub extern "C" fn ddog_logger_set_log_level (
1730 log_level : logger:: LogEventLevel ,
1831) -> Option < Box < Error > > {
19- logger_set_log_level ( log_level) . err ( ) . map ( Box :: new)
32+ validate_log_level ( log_level)
33+ . and_then ( |_| logger_set_log_level ( log_level) )
34+ . err ( )
35+ . map ( Box :: new)
2036}
2137
2238/// Disables logging by configuring a no-op logger.
@@ -45,14 +61,19 @@ pub struct StdoutConfig {
4561/// * `config` - Configuration for stdout logging including log level
4662///
4763/// # Errors
48- /// Returns an error if the logger cannot be configured.
64+ /// Returns an error if the logger cannot be configured or if the log level is invalid .
4965#[ no_mangle]
5066pub extern "C" fn ddog_logger_configure_stdout ( config : StdoutConfig ) -> Option < Box < Error > > {
51- let logger_config = logger:: LoggerConfig {
52- level : config. level ,
53- writer : logger:: WriterConfig :: Stdout ,
54- } ;
55- logger_configure ( logger_config) . err ( ) . map ( Box :: new)
67+ validate_log_level ( config. level )
68+ . and_then ( |_| {
69+ let logger_config = logger:: LoggerConfig {
70+ level : config. level ,
71+ writer : logger:: WriterConfig :: Stdout ,
72+ } ;
73+ logger_configure ( logger_config)
74+ } )
75+ . err ( )
76+ . map ( Box :: new)
5677}
5778
5879/// Configuration for file output.
@@ -70,14 +91,19 @@ pub struct FileConfig<'a> {
7091/// * `config` - Configuration for file logging including path and log level
7192///
7293/// # Errors
73- /// Returns an error if the logger cannot be configured.
94+ /// Returns an error if the logger cannot be configured or if the log level is invalid .
7495#[ no_mangle]
7596pub extern "C" fn ddog_logger_configure_file ( config : FileConfig ) -> Option < Box < Error > > {
76- let logger_config = logger:: LoggerConfig {
77- level : config. level ,
78- writer : logger:: WriterConfig :: File ( logger:: FileConfig {
79- path : config. path . to_string ( ) ,
80- } ) ,
81- } ;
82- logger_configure ( logger_config) . err ( ) . map ( Box :: new)
97+ validate_log_level ( config. level )
98+ . and_then ( |_| {
99+ let logger_config = logger:: LoggerConfig {
100+ level : config. level ,
101+ writer : logger:: WriterConfig :: File ( logger:: FileConfig {
102+ path : config. path . to_string ( ) ,
103+ } ) ,
104+ } ;
105+ logger_configure ( logger_config)
106+ } )
107+ . err ( )
108+ . map ( Box :: new)
83109}
0 commit comments