diff --git a/libs/sdk-bindings/src/breez_sdk.udl b/libs/sdk-bindings/src/breez_sdk.udl
index d4b78a866..b76f66f84 100644
--- a/libs/sdk-bindings/src/breez_sdk.udl
+++ b/libs/sdk-bindings/src/breez_sdk.udl
@@ -800,6 +800,15 @@ dictionary RefundResponse {
     string refund_tx_id;
 };
 
+enum LevelFilter {
+    "Off",
+    "Error",
+    "Warn",
+    "Info",
+    "Debug",
+    "Trace",
+};
+
 interface BlockingBreezServices {
 
    [Throws=SdkError]
@@ -956,7 +965,7 @@ namespace breez_sdk {
  BlockingBreezServices connect(ConnectRequest req, EventListener listener);
 
  [Throws=SdkError]
- void set_log_stream(LogStream log_stream);
+ void set_log_stream(LogStream log_stream, LevelFilter? filter_level);
 
  [Throws=SdkError]
  LNInvoice parse_invoice(string invoice);
diff --git a/libs/sdk-bindings/src/uniffi_binding.rs b/libs/sdk-bindings/src/uniffi_binding.rs
index 30e5b36c4..7a9880554 100644
--- a/libs/sdk-bindings/src/uniffi_binding.rs
+++ b/libs/sdk-bindings/src/uniffi_binding.rs
@@ -8,25 +8,25 @@ use breez_sdk_core::{
     CheckMessageResponse, ClosedChannelPaymentDetails, Config, ConfigureNodeRequest,
     ConnectRequest, CurrencyInfo, EnvironmentType, EventListener, FeeratePreset, FiatCurrency,
     GreenlightCredentials, GreenlightNodeConfig, HealthCheckStatus, InputType, InvoicePaidDetails,
-    LNInvoice, ListPaymentsRequest, LnPaymentDetails, LnUrlAuthRequestData, LnUrlCallbackStatus,
-    LnUrlErrorData, LnUrlPayErrorData, LnUrlPayRequest, LnUrlPayRequestData, LnUrlPayResult,
-    LnUrlPaySuccessData, LnUrlWithdrawRequest, LnUrlWithdrawRequestData, LnUrlWithdrawResult,
-    LnUrlWithdrawSuccessData, LocaleOverrides, LocalizedName, LogEntry, LogStream, LspInformation,
-    MaxReverseSwapAmountResponse, MessageSuccessActionData, MetadataFilter, MetadataItem, Network,
-    NodeConfig, NodeCredentials, NodeState, OnchainPaymentLimitsResponse, OpenChannelFeeRequest,
-    OpenChannelFeeResponse, OpeningFeeParams, OpeningFeeParamsMenu, PayOnchainRequest,
-    PayOnchainResponse, Payment, PaymentDetails, PaymentFailedData, PaymentStatus, PaymentType,
-    PaymentTypeFilter, PrepareOnchainPaymentRequest, PrepareOnchainPaymentResponse,
-    PrepareRedeemOnchainFundsRequest, PrepareRedeemOnchainFundsResponse, PrepareRefundRequest,
-    PrepareRefundResponse, Rate, ReceiveOnchainRequest, ReceivePaymentRequest,
-    ReceivePaymentResponse, RecommendedFees, RedeemOnchainFundsRequest, RedeemOnchainFundsResponse,
-    RefundRequest, RefundResponse, ReportIssueRequest, ReportPaymentFailureDetails,
-    ReverseSwapFeesRequest, ReverseSwapInfo, ReverseSwapPairInfo, ReverseSwapStatus, RouteHint,
-    RouteHintHop, SendOnchainRequest, SendOnchainResponse, SendPaymentRequest, SendPaymentResponse,
-    SendSpontaneousPaymentRequest, ServiceHealthCheckResponse, SignMessageRequest,
-    SignMessageResponse, StaticBackupRequest, StaticBackupResponse, SuccessActionProcessed,
-    SwapAmountType, SwapInfo, SwapStatus, Symbol, TlvEntry, UnspentTransactionOutput,
-    UrlSuccessActionData,
+    LNInvoice, LevelFilter, ListPaymentsRequest, LnPaymentDetails, LnUrlAuthRequestData,
+    LnUrlCallbackStatus, LnUrlErrorData, LnUrlPayErrorData, LnUrlPayRequest, LnUrlPayRequestData,
+    LnUrlPayResult, LnUrlPaySuccessData, LnUrlWithdrawRequest, LnUrlWithdrawRequestData,
+    LnUrlWithdrawResult, LnUrlWithdrawSuccessData, LocaleOverrides, LocalizedName, LogEntry,
+    LogStream, LspInformation, MaxReverseSwapAmountResponse, MessageSuccessActionData,
+    MetadataFilter, MetadataItem, Network, NodeConfig, NodeCredentials, NodeState,
+    OnchainPaymentLimitsResponse, OpenChannelFeeRequest, OpenChannelFeeResponse, OpeningFeeParams,
+    OpeningFeeParamsMenu, PayOnchainRequest, PayOnchainResponse, Payment, PaymentDetails,
+    PaymentFailedData, PaymentStatus, PaymentType, PaymentTypeFilter, PrepareOnchainPaymentRequest,
+    PrepareOnchainPaymentResponse, PrepareRedeemOnchainFundsRequest,
+    PrepareRedeemOnchainFundsResponse, PrepareRefundRequest, PrepareRefundResponse, Rate,
+    ReceiveOnchainRequest, ReceivePaymentRequest, ReceivePaymentResponse, RecommendedFees,
+    RedeemOnchainFundsRequest, RedeemOnchainFundsResponse, RefundRequest, RefundResponse,
+    ReportIssueRequest, ReportPaymentFailureDetails, ReverseSwapFeesRequest, ReverseSwapInfo,
+    ReverseSwapPairInfo, ReverseSwapStatus, RouteHint, RouteHintHop, SendOnchainRequest,
+    SendOnchainResponse, SendPaymentRequest, SendPaymentResponse, SendSpontaneousPaymentRequest,
+    ServiceHealthCheckResponse, SignMessageRequest, SignMessageResponse, StaticBackupRequest,
+    StaticBackupResponse, SuccessActionProcessed, SwapAmountType, SwapInfo, SwapStatus, Symbol,
+    TlvEntry, UnspentTransactionOutput, UrlSuccessActionData,
 };
 use once_cell::sync::Lazy;
 use std::sync::Arc;
@@ -78,7 +78,10 @@ pub fn connect(
 }
 
 /// If used, this must be called before `connect`
-pub fn set_log_stream(log_stream: Box<dyn LogStream>, filter_level: Option<LevelFilter>) -> SdkResult<()> {
+pub fn set_log_stream(
+    log_stream: Box<dyn LogStream>,
+    filter_level: Option<LevelFilter>,
+) -> SdkResult<()> {
     init_uniffi_logger(log_stream, filter_level);
     Ok(())
 }
diff --git a/libs/sdk-core/src/binding.rs b/libs/sdk-core/src/binding.rs
index 7fc73cc8b..a47f4ef5c 100644
--- a/libs/sdk-core/src/binding.rs
+++ b/libs/sdk-core/src/binding.rs
@@ -15,7 +15,6 @@ use std::sync::Arc;
 
 use anyhow::{anyhow, Result};
 use flutter_rust_bridge::StreamSink;
-use log::LevelFilter;
 use once_cell::sync::{Lazy, OnceCell};
 use tokio::sync::Mutex;
 
@@ -34,7 +33,7 @@ use crate::lsp::LspInformation;
 use crate::models::{Config, LogEntry, NodeState, Payment, SwapInfo};
 use crate::{
     BackupStatus, BuyBitcoinRequest, BuyBitcoinResponse, CheckMessageRequest, CheckMessageResponse,
-    ConfigureNodeRequest, ConnectRequest, EnvironmentType, ListPaymentsRequest,
+    ConfigureNodeRequest, ConnectRequest, EnvironmentType, LevelFilter, ListPaymentsRequest,
     LnUrlCallbackStatus, LnUrlPayRequest, LnUrlWithdrawRequest, LnUrlWithdrawResult,
     MaxReverseSwapAmountResponse, NodeConfig, NodeCredentials, OnchainPaymentLimitsResponse,
     OpenChannelFeeRequest, OpenChannelFeeResponse, PayOnchainRequest, PayOnchainResponse,
diff --git a/libs/sdk-core/src/bridge_generated.io.rs b/libs/sdk-core/src/bridge_generated.io.rs
index 38fbe30c6..a36a08a0f 100644
--- a/libs/sdk-core/src/bridge_generated.io.rs
+++ b/libs/sdk-core/src/bridge_generated.io.rs
@@ -77,8 +77,8 @@ pub extern "C" fn wire_breez_events_stream(port_: i64) {
 }
 
 #[no_mangle]
-pub extern "C" fn wire_breez_log_stream(port_: i64) {
-    wire_breez_log_stream_impl(port_)
+pub extern "C" fn wire_breez_log_stream(port_: i64, filter_level: *mut i32) {
+    wire_breez_log_stream_impl(port_, filter_level)
 }
 
 #[no_mangle]
@@ -356,6 +356,11 @@ pub extern "C" fn new_box_autoadd_i64_0(value: i64) -> *mut i64 {
     support::new_leak_box_ptr(value)
 }
 
+#[no_mangle]
+pub extern "C" fn new_box_autoadd_level_filter_0(value: i32) -> *mut i32 {
+    support::new_leak_box_ptr(value)
+}
+
 #[no_mangle]
 pub extern "C" fn new_box_autoadd_list_payments_request_0() -> *mut wire_ListPaymentsRequest {
     support::new_leak_box_ptr(wire_ListPaymentsRequest::new_with_null_ptr())
@@ -580,6 +585,12 @@ impl Wire2Api<i64> for *mut i64 {
         unsafe { *support::box_from_leak_ptr(self) }
     }
 }
+impl Wire2Api<LevelFilter> for *mut i32 {
+    fn wire2api(self) -> LevelFilter {
+        let wrap = unsafe { support::box_from_leak_ptr(self) };
+        Wire2Api::<LevelFilter>::wire2api(*wrap).into()
+    }
+}
 impl Wire2Api<ListPaymentsRequest> for *mut wire_ListPaymentsRequest {
     fn wire2api(self) -> ListPaymentsRequest {
         let wrap = unsafe { support::box_from_leak_ptr(self) };
diff --git a/libs/sdk-core/src/bridge_generated.rs b/libs/sdk-core/src/bridge_generated.rs
index cde5963ea..bad856c21 100644
--- a/libs/sdk-core/src/bridge_generated.rs
+++ b/libs/sdk-core/src/bridge_generated.rs
@@ -66,6 +66,7 @@ use crate::models::EnvironmentType;
 use crate::models::GreenlightCredentials;
 use crate::models::GreenlightNodeConfig;
 use crate::models::HealthCheckStatus;
+use crate::models::LevelFilter;
 use crate::models::ListPaymentsRequest;
 use crate::models::LnPaymentDetails;
 use crate::models::LnUrlCallbackStatus;
@@ -311,14 +312,22 @@ fn wire_breez_events_stream_impl(port_: MessagePort) {
         },
     )
 }
-fn wire_breez_log_stream_impl(port_: MessagePort) {
+fn wire_breez_log_stream_impl(
+    port_: MessagePort,
+    filter_level: impl Wire2Api<Option<LevelFilter>> + UnwindSafe,
+) {
     FLUTTER_RUST_BRIDGE_HANDLER.wrap::<_, _, _, (), _>(
         WrapInfo {
             debug_name: "breez_log_stream",
             port: Some(port_),
             mode: FfiCallMode::Stream,
         },
-        move || move |task_callback| breez_log_stream(task_callback.stream_sink::<_, LogEntry>()),
+        move || {
+            let api_filter_level = filter_level.wire2api();
+            move |task_callback| {
+                breez_log_stream(task_callback.stream_sink::<_, LogEntry>(), api_filter_level)
+            }
+        },
     )
 }
 fn wire_list_lsps_impl(port_: MessagePort) {
@@ -949,6 +958,19 @@ impl Wire2Api<i64> for i64 {
         self
     }
 }
+impl Wire2Api<LevelFilter> for i32 {
+    fn wire2api(self) -> LevelFilter {
+        match self {
+            0 => LevelFilter::Off,
+            1 => LevelFilter::Error,
+            2 => LevelFilter::Warn,
+            3 => LevelFilter::Info,
+            4 => LevelFilter::Debug,
+            5 => LevelFilter::Trace,
+            _ => unreachable!("Invalid variant for LevelFilter: {}", self),
+        }
+    }
+}
 
 impl Wire2Api<Network> for i32 {
     fn wire2api(self) -> Network {
diff --git a/libs/sdk-core/src/logger.rs b/libs/sdk-core/src/logger.rs
index 734124747..b3f4775a3 100644
--- a/libs/sdk-core/src/logger.rs
+++ b/libs/sdk-core/src/logger.rs
@@ -1,3 +1,4 @@
+use crate::models::LevelFilter as BindingLevelFilter;
 use crate::{LogEntry, LogStream};
 use anyhow::{anyhow, Result};
 use chrono::Local;
@@ -83,13 +84,9 @@ fn init_env_logger(target: Option<Target>, filter_level: Option<LevelFilter>) ->
 
 static INIT_DART_LOGGER: Once = Once::new();
 
-pub fn init_dart_logger(filter_level: Option<LevelFilter>) {
+pub fn init_dart_logger(filter_level: Option<BindingLevelFilter>) {
     INIT_DART_LOGGER.call_once(|| {
-        let filter_level = if filter_level.is_some() {
-            filter_level.unwrap()
-        } else {
-            LevelFilter::Trace
-        };
+        let filter_level = get_filter_level(filter_level);
 
         assert!(
             filter_level <= STATIC_MAX_LEVEL,
@@ -157,7 +154,10 @@ impl Log for DartLogger {
 
 static INIT_UNIFFI_LOGGER: Once = Once::new();
 
-pub fn init_uniffi_logger(log_stream: Box<dyn LogStream>, filter_level: Option<LevelFilter>) {
+pub fn init_uniffi_logger(
+    log_stream: Box<dyn LogStream>,
+    filter_level: Option<BindingLevelFilter>,
+) {
     INIT_UNIFFI_LOGGER.call_once(|| {
         UniFFILogger::set_log_stream(log_stream, filter_level);
     });
@@ -169,13 +169,8 @@ pub struct UniFFILogger {
 }
 
 impl UniFFILogger {
-    fn set_log_stream(log_stream: Box<dyn LogStream>, filter_level: Option<LevelFilter>) {
-        let filter_level = if filter_level.is_some() {
-            filter_level.unwrap()
-        } else {
-            LevelFilter::Trace
-        };
-
+    fn set_log_stream(log_stream: Box<dyn LogStream>, filter_level: Option<BindingLevelFilter>) {
+        let filter_level = get_filter_level(filter_level);
         assert!(
             filter_level <= STATIC_MAX_LEVEL,
             "Should respect STATIC_MAX_LEVEL={:?}, which is done in compile time. level{:?}",
@@ -254,11 +249,7 @@ pub fn init_sdk_logger(
     app_logger: Option<Box<dyn Log>>,
     filter_level: Option<LevelFilter>,
 ) -> Result<()> {
-    let filter_level = if filter_level.is_some() {
-        filter_level.unwrap()
-    } else {
-        LevelFilter::Trace
-    };
+    let filter_level = filter_level.unwrap_or(LevelFilter::Trace);
 
     assert!(
         filter_level <= STATIC_MAX_LEVEL,
@@ -315,3 +306,16 @@ impl Log for GlobalSdkLogger {
 
     fn flush(&self) {}
 }
+
+/* Binding LevelFilter */
+
+fn get_filter_level(filter_level: Option<BindingLevelFilter>) -> LevelFilter {
+    match filter_level.unwrap_or(BindingLevelFilter::Trace) {
+        BindingLevelFilter::Off => LevelFilter::Off,
+        BindingLevelFilter::Error => LevelFilter::Error,
+        BindingLevelFilter::Warn => LevelFilter::Warn,
+        BindingLevelFilter::Info => LevelFilter::Info,
+        BindingLevelFilter::Debug => LevelFilter::Debug,
+        BindingLevelFilter::Trace => LevelFilter::Trace,
+    }
+}
diff --git a/libs/sdk-core/src/models.rs b/libs/sdk-core/src/models.rs
index 7b7adc817..a01e6b5e0 100644
--- a/libs/sdk-core/src/models.rs
+++ b/libs/sdk-core/src/models.rs
@@ -1653,6 +1653,36 @@ impl PaymentPathEdge {
     }
 }
 
+/// An enum representing the available verbosity level filters of the logger.
+#[repr(usize)]
+#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
+pub enum LevelFilter {
+    // The "off" level.
+    ///
+    /// A level lower than all log levels.
+    Off,
+    /// The "error" level.
+    ///
+    /// Designates very serious errors.
+    Error,
+    /// The "warn" level.
+    ///
+    /// Designates hazardous situations.
+    Warn,
+    /// The "info" level.
+    ///
+    /// Designates useful information.
+    Info,
+    /// The "debug" level.
+    ///
+    /// Designates lower priority information.
+    Debug,
+    /// The "trace" level.
+    ///
+    /// Designates very low priority, often extremely verbose, information.
+    Trace,
+}
+
 #[cfg(test)]
 mod tests {
     use anyhow::Result;
diff --git a/libs/sdk-flutter/ios/Classes/bridge_generated.h b/libs/sdk-flutter/ios/Classes/bridge_generated.h
index 2458cffe3..615531bb1 100644
--- a/libs/sdk-flutter/ios/Classes/bridge_generated.h
+++ b/libs/sdk-flutter/ios/Classes/bridge_generated.h
@@ -315,7 +315,7 @@ void wire_service_health_check(int64_t port_, struct wire_uint_8_list *api_key);
 
 void wire_breez_events_stream(int64_t port_);
 
-void wire_breez_log_stream(int64_t port_);
+void wire_breez_log_stream(int64_t port_, int32_t *filter_level);
 
 void wire_list_lsps(int64_t port_);
 
@@ -424,6 +424,8 @@ struct wire_GreenlightNodeConfig *new_box_autoadd_greenlight_node_config_0(void)
 
 int64_t *new_box_autoadd_i64_0(int64_t value);
 
+int32_t *new_box_autoadd_level_filter_0(int32_t value);
+
 struct wire_ListPaymentsRequest *new_box_autoadd_list_payments_request_0(void);
 
 struct wire_LnUrlAuthRequestData *new_box_autoadd_ln_url_auth_request_data_0(void);
@@ -557,6 +559,7 @@ static int64_t dummy_method_to_enforce_bundling(void) {
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_greenlight_credentials_0);
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_greenlight_node_config_0);
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_i64_0);
+    dummy_var ^= ((int64_t) (void*) new_box_autoadd_level_filter_0);
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_list_payments_request_0);
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_ln_url_auth_request_data_0);
     dummy_var ^= ((int64_t) (void*) new_box_autoadd_ln_url_pay_request_0);
diff --git a/libs/sdk-flutter/lib/bridge_generated.dart b/libs/sdk-flutter/lib/bridge_generated.dart
index 0f23d5340..ee85302e0 100644
--- a/libs/sdk-flutter/lib/bridge_generated.dart
+++ b/libs/sdk-flutter/lib/bridge_generated.dart
@@ -89,7 +89,7 @@ abstract class BreezSdkCore {
   FlutterRustBridgeTaskConstMeta get kBreezEventsStreamConstMeta;
 
   /// If used, this must be called before `connect`. It can only be called once.
-  Stream<LogEntry> breezLogStream({dynamic hint});
+  Stream<LogEntry> breezLogStream({LevelFilter? filterLevel, dynamic hint});
 
   FlutterRustBridgeTaskConstMeta get kBreezLogStreamConstMeta;
 
@@ -696,6 +696,38 @@ class InvoicePaidDetails {
   });
 }
 
+/// An enum representing the available verbosity level filters of the logger.
+enum LevelFilter {
+  ///
+  /// A level lower than all log levels.
+  Off,
+
+  /// The "error" level.
+  ///
+  /// Designates very serious errors.
+  Error,
+
+  /// The "warn" level.
+  ///
+  /// Designates hazardous situations.
+  Warn,
+
+  /// The "info" level.
+  ///
+  /// Designates useful information.
+  Info,
+
+  /// The "debug" level.
+  ///
+  /// Designates lower priority information.
+  Debug,
+
+  /// The "trace" level.
+  ///
+  /// Designates very low priority, often extremely verbose, information.
+  Trace,
+}
+
 /// Represents a list payments request.
 class ListPaymentsRequest {
   final List<PaymentTypeFilter>? filters;
@@ -2289,20 +2321,21 @@ class BreezSdkCoreImpl implements BreezSdkCore {
         argNames: [],
       );
 
-  Stream<LogEntry> breezLogStream({dynamic hint}) {
+  Stream<LogEntry> breezLogStream({LevelFilter? filterLevel, dynamic hint}) {
+    var arg0 = _platform.api2wire_opt_box_autoadd_level_filter(filterLevel);
     return _platform.executeStream(FlutterRustBridgeTask(
-      callFfi: (port_) => _platform.inner.wire_breez_log_stream(port_),
+      callFfi: (port_) => _platform.inner.wire_breez_log_stream(port_, arg0),
       parseSuccessData: _wire2api_log_entry,
       parseErrorData: _wire2api_FrbAnyhowException,
       constMeta: kBreezLogStreamConstMeta,
-      argValues: [],
+      argValues: [filterLevel],
       hint: hint,
     ));
   }
 
   FlutterRustBridgeTaskConstMeta get kBreezLogStreamConstMeta => const FlutterRustBridgeTaskConstMeta(
         debugName: "breez_log_stream",
-        argNames: [],
+        argNames: ["filterLevel"],
       );
 
   Future<List<LspInformation>> listLsps({dynamic hint}) {
@@ -4223,6 +4256,11 @@ int api2wire_i32(int raw) {
   return raw;
 }
 
+@protected
+int api2wire_level_filter(LevelFilter raw) {
+  return api2wire_i32(raw.index);
+}
+
 @protected
 int api2wire_network(Network raw) {
   return api2wire_i32(raw.index);
@@ -4320,6 +4358,11 @@ class BreezSdkCorePlatform extends FlutterRustBridgeBase<BreezSdkCoreWire> {
     return inner.new_box_autoadd_i64_0(api2wire_i64(raw));
   }
 
+  @protected
+  ffi.Pointer<ffi.Int32> api2wire_box_autoadd_level_filter(LevelFilter raw) {
+    return inner.new_box_autoadd_level_filter_0(api2wire_level_filter(raw));
+  }
+
   @protected
   ffi.Pointer<wire_ListPaymentsRequest> api2wire_box_autoadd_list_payments_request(ListPaymentsRequest raw) {
     final ptr = inner.new_box_autoadd_list_payments_request_0();
@@ -4556,6 +4599,11 @@ class BreezSdkCorePlatform extends FlutterRustBridgeBase<BreezSdkCoreWire> {
     return raw == null ? ffi.nullptr : api2wire_box_autoadd_i64(raw);
   }
 
+  @protected
+  ffi.Pointer<ffi.Int32> api2wire_opt_box_autoadd_level_filter(LevelFilter? raw) {
+    return raw == null ? ffi.nullptr : api2wire_box_autoadd_level_filter(raw);
+  }
+
   @protected
   ffi.Pointer<wire_OpeningFeeParams> api2wire_opt_box_autoadd_opening_fee_params(OpeningFeeParams? raw) {
     return raw == null ? ffi.nullptr : api2wire_box_autoadd_opening_fee_params(raw);
@@ -5288,15 +5336,19 @@ class BreezSdkCoreWire implements FlutterRustBridgeWireBase {
 
   void wire_breez_log_stream(
     int port_,
+    ffi.Pointer<ffi.Int32> filter_level,
   ) {
     return _wire_breez_log_stream(
       port_,
+      filter_level,
     );
   }
 
   late final _wire_breez_log_streamPtr =
-      _lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>('wire_breez_log_stream');
-  late final _wire_breez_log_stream = _wire_breez_log_streamPtr.asFunction<void Function(int)>();
+      _lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64, ffi.Pointer<ffi.Int32>)>>(
+          'wire_breez_log_stream');
+  late final _wire_breez_log_stream =
+      _wire_breez_log_streamPtr.asFunction<void Function(int, ffi.Pointer<ffi.Int32>)>();
 
   void wire_list_lsps(
     int port_,
@@ -6026,6 +6078,20 @@ class BreezSdkCoreWire implements FlutterRustBridgeWireBase {
   late final _new_box_autoadd_i64_0 =
       _new_box_autoadd_i64_0Ptr.asFunction<ffi.Pointer<ffi.Int64> Function(int)>();
 
+  ffi.Pointer<ffi.Int32> new_box_autoadd_level_filter_0(
+    int value,
+  ) {
+    return _new_box_autoadd_level_filter_0(
+      value,
+    );
+  }
+
+  late final _new_box_autoadd_level_filter_0Ptr =
+      _lookup<ffi.NativeFunction<ffi.Pointer<ffi.Int32> Function(ffi.Int32)>>(
+          'new_box_autoadd_level_filter_0');
+  late final _new_box_autoadd_level_filter_0 =
+      _new_box_autoadd_level_filter_0Ptr.asFunction<ffi.Pointer<ffi.Int32> Function(int)>();
+
   ffi.Pointer<wire_ListPaymentsRequest> new_box_autoadd_list_payments_request_0() {
     return _new_box_autoadd_list_payments_request_0();
   }
diff --git a/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt b/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt
index 230b82eaf..6ae95c33f 100644
--- a/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt
+++ b/libs/sdk-react-native/android/src/main/java/com/breezsdk/BreezSDKMapper.kt
@@ -4064,6 +4064,21 @@ fun asInputTypeList(arr: ReadableArray): List<InputType> {
     return list
 }
 
+fun asLevelFilter(type: String): LevelFilter {
+    return LevelFilter.valueOf(type.uppercase())
+}
+
+fun asLevelFilterList(arr: ReadableArray): List<LevelFilter> {
+    val list = ArrayList<LevelFilter>()
+    for (value in arr.toArrayList()) {
+        when (value) {
+            is String -> list.add(asLevelFilter(value)!!)
+            else -> throw SdkException.Generic(errUnexpectedType("${value::class.java.name}"))
+        }
+    }
+    return list
+}
+
 fun asLnUrlCallbackStatus(lnUrlCallbackStatus: ReadableMap): LnUrlCallbackStatus? {
     val type = lnUrlCallbackStatus.getString("type")
 
diff --git a/libs/sdk-react-native/ios/BreezSDKMapper.swift b/libs/sdk-react-native/ios/BreezSDKMapper.swift
index 067516d84..4a6c11c58 100644
--- a/libs/sdk-react-native/ios/BreezSDKMapper.swift
+++ b/libs/sdk-react-native/ios/BreezSDKMapper.swift
@@ -4692,6 +4692,69 @@ enum BreezSDKMapper {
         return list
     }
 
+    static func asLevelFilter(levelFilter: String) throws -> LevelFilter {
+        switch levelFilter {
+        case "off":
+            return LevelFilter.off
+
+        case "error":
+            return LevelFilter.error
+
+        case "warn":
+            return LevelFilter.warn
+
+        case "info":
+            return LevelFilter.info
+
+        case "debug":
+            return LevelFilter.debug
+
+        case "trace":
+            return LevelFilter.trace
+
+        default: throw SdkError.Generic(message: "Invalid variant \(levelFilter) for enum LevelFilter")
+        }
+    }
+
+    static func valueOf(levelFilter: LevelFilter) -> String {
+        switch levelFilter {
+        case .off:
+            return "off"
+
+        case .error:
+            return "error"
+
+        case .warn:
+            return "warn"
+
+        case .info:
+            return "info"
+
+        case .debug:
+            return "debug"
+
+        case .trace:
+            return "trace"
+        }
+    }
+
+    static func arrayOf(levelFilterList: [LevelFilter]) -> [String] {
+        return levelFilterList.map { v -> String in valueOf(levelFilter: v) }
+    }
+
+    static func asLevelFilterList(arr: [Any]) throws -> [LevelFilter] {
+        var list = [LevelFilter]()
+        for value in arr {
+            if let val = value as? String {
+                var levelFilter = try asLevelFilter(levelFilter: val)
+                list.append(levelFilter)
+            } else {
+                throw SdkError.Generic(message: errUnexpectedType(typeName: "LevelFilter"))
+            }
+        }
+        return list
+    }
+
     static func asLnUrlCallbackStatus(lnUrlCallbackStatus: [String: Any?]) throws -> LnUrlCallbackStatus {
         let type = lnUrlCallbackStatus["type"] as! String
         if type == "ok" {
diff --git a/libs/sdk-react-native/src/index.ts b/libs/sdk-react-native/src/index.ts
index 13c3a52d6..0150094af 100644
--- a/libs/sdk-react-native/src/index.ts
+++ b/libs/sdk-react-native/src/index.ts
@@ -685,6 +685,15 @@ export type InputType = {
     data: LnUrlErrorData
 }
 
+export enum LevelFilter {
+    OFF = "off",
+    ERROR = "error",
+    WARN = "warn",
+    INFO = "info",
+    DEBUG = "debug",
+    TRACE = "trace"
+}
+
 export enum LnUrlCallbackStatusVariant {
     OK = "ok",
     ERROR_STATUS = "errorStatus"
@@ -842,11 +851,11 @@ export const connect = async (req: ConnectRequest, listener: EventListener): Pro
     return subscription
 }
 
-export const setLogStream = async (logStream: LogStream): Promise<EmitterSubscription> => {
+export const setLogStream = async (logStream: LogStream, filterLevel?: LevelFilter): Promise<EmitterSubscription> => {
     const subscription = BreezSDKEmitter.addListener("breezSdkLog", logStream)
 
     try {
-        await BreezSDK.setLogStream()
+        await BreezSDK.setLogStream(filterLevel)
     } catch {}
 
     return subscription