Adding logging

The SDK implements detailed logging via a streaming interface you can manage within your application. The log entries are split into several levels that you can filter and store as desired within your application, for example, by appending them to a log file.

Rust
let data_dir_path = PathBuf::from(&data_dir);
fs::create_dir_all(data_dir_path)?;

LiquidSdk::init_logging(&data_dir, None)?;
Swift
class SDKLogger: Logger {
    func log(l: LogEntry) {
        print("Received log [", l.level, "]: ", l.line)
    }
}

func logging() throws {
    try? setLogger(logger: SDKLogger())
}
Kotlin
class SDKLogger : Logger {
    override fun log(l: LogEntry) {
        // Log.v("SDKListener", "Received log [${l.level}]: ${l.line}")
    }
}

fun setLogger(logger: SDKLogger) {
    try {
        setLogger(logger)
    } catch (e: Exception) {
        // handle error
    }
}
React Native
const onLogEntry = (l: LogEntry) => {
  console.log(`Received log [${l.level}]: ${l.line}`)
}

const subscription = await setLogger(onLogEntry)
Dart
StreamSubscription<LogEntry>? _breezLogSubscription;
Stream<LogEntry>? _breezLogStream;

// Initializes SDK log stream.
//
// Call once on your Dart entrypoint file, e.g.; `lib/main.dart`.
void initializeLogStream() {
  _breezLogStream ??= breezLogStream().asBroadcastStream();
}

final _logStreamController = StreamController<LogEntry>.broadcast();
Stream<LogEntry> get logStream => _logStreamController.stream;

// Subscribe to the log stream
void subscribeToLogStream() {
  _breezLogSubscription = _breezLogStream?.listen((logEntry) {
    _logStreamController.add(logEntry);
  }, onError: (e) {
    _logStreamController.addError(e);
  });
}

// Unsubscribe from the log stream
void unsubscribeFromLogStream() {
  _breezLogSubscription?.cancel();
}
Python
class SdkLogger(Logger):
    def log(log_entry: LogEntry):
        logging.debug("Received log [", log_entry.level, "]: ", log_entry.line)

def set_logger(logger: SdkLogger):
    try:
        breez_sdk_liquid.set_logger(logger)
    except Exception as error:
        logging.error(error)
        raise
Go
type SdkLogger struct{}

func (SdkLogger) Log(l breez_sdk_liquid.LogEntry) {
    log.Printf("Received log [%v]: %v", l.Level, l.Line)
}

func SetLogger(logger SdkLogger) {
    breez_sdk_liquid.SetLogger(logger)
}

C#
public class SdkLogger : Logger
{
    public void Log(LogEntry l)
    {
        Console.WriteLine($"Received log [{l.level}]: {l.line}");
    }
}

public void SetLogger(SdkLogger logger) {
    try
    {
        BreezSdkLiquidMethods.SetLogger(logger);
    }
    catch (Exception)
    {
        // Handle error
    }
}