taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit b41fb7403428b9bbbd827234e567d8302f1a2a2b
parent bcdec95cec445b398ca3e86195b531f7f0ebc507
Author: Marc Stibane <marc@taler.net>
Date:   Mon, 23 Oct 2023 23:14:47 +0200

Native Logging for wallet-core (QuickJS)

Diffstat:
MTalerWallet1/Model/WalletModel.swift | 4+++-
MTalerWallet1/Quickjs/quickjs.swift | 31++++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/TalerWallet1/Model/WalletModel.swift b/TalerWallet1/Model/WalletModel.swift @@ -94,13 +94,15 @@ fileprivate struct InitRequest: WalletBackendFormattedRequest { func args() -> Args { return Args(persistentStoragePath: persistentStoragePath, // cryptoWorkerType: "sync", - logLevel: "info") // trace, info, warn, error, none + logLevel: "info", // trace, info, warn, error, none + useNativeLogging: true) } struct Args: Encodable { var persistentStoragePath: String // var cryptoWorkerType: String var logLevel: String + var useNativeLogging: Bool } var persistentStoragePath: String diff --git a/TalerWallet1/Quickjs/quickjs.swift b/TalerWallet1/Quickjs/quickjs.swift @@ -3,13 +3,14 @@ * See LICENSE.md */ import Foundation +import os.log import FTalerWalletcore public protocol QuickjsMessageHandler: AnyObject { func handleMessage(message: String) } - +// MARK: - func notification_callback(userdata: Optional<UnsafeMutableRawPointer>, payload: Optional<UnsafePointer<Int8>>) { let native = Unmanaged<Quickjs>.fromOpaque(userdata!).takeUnretainedValue() @@ -17,15 +18,43 @@ func notification_callback(userdata: Optional<UnsafeMutableRawPointer>, native.internalOnNotify(payload: string) } +func logging_callback(userdata: Optional<UnsafeMutableRawPointer>, + level: TALER_WALLET_LogLevel, + tag: Optional<UnsafePointer<Int8>>, + message: Optional<UnsafePointer<Int8>>) { + let native = Unmanaged<Quickjs>.fromOpaque(userdata!).takeUnretainedValue() + let theTag = String(cString: tag!) + let theMessage = String(cString: message!) + + switch level { + case TALER_WALLET_LOG_ERROR: + native.logger.error("\(theTag, privacy: .public) \(theMessage, privacy: .public)") + case TALER_WALLET_LOG_WARN: + native.logger.warning("\(theTag, privacy: .public) \(theMessage, privacy: .public)") + case TALER_WALLET_LOG_MESSAGE: + native.logger.notice("\(theTag, privacy: .public) \(theMessage, privacy: .public)") + case TALER_WALLET_LOG_INFO: + native.logger.info("\(theTag, privacy: .public) \(theMessage, privacy: .public)") + case TALER_WALLET_LOG_TRACE: + native.logger.trace("\(theTag, privacy: .public) \(theMessage, privacy: .public)") + default: break + } +} +// MARK: - public class Quickjs { var talerWalletInstance: OpaquePointer! public weak var messageHandler: QuickjsMessageHandler? + var logger: Logger public init() { + self.logger = Logger(subsystem: "net.taler.gnu", category: "QuickJS") self.talerWalletInstance = TALER_WALLET_create() TALER_WALLET_set_message_handler(talerWalletInstance, notification_callback, Unmanaged.passUnretained(self).toOpaque()) + TALER_WALLET_set_log_handler(talerWalletInstance, + logging_callback, + Unmanaged.passUnretained(self).toOpaque()) TALER_WALLET_run(talerWalletInstance); }