//////////////////////////////////////////////////////////////////////////// // // Copyright 2023 Realm Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////// #import <Realm/RLMConstants.h> RLM_HEADER_AUDIT_BEGIN(nullability) /// An enum representing different levels of sync-related logging that can be configured. typedef RLM_CLOSED_ENUM(NSUInteger, RLMLogLevel) { /// Nothing will ever be logged. RLMLogLevelOff, /// Only fatal errors will be logged. RLMLogLevelFatal, /// Only errors will be logged. RLMLogLevelError, /// Warnings and errors will be logged. RLMLogLevelWarn, /// Information about sync events will be logged. Fewer events will be logged in order to avoid overhead. RLMLogLevelInfo, /// Information about sync events will be logged. More events will be logged than with `RLMLogLevelInfo`. RLMLogLevelDetail, /// Log information that can aid in debugging. /// /// - warning: Will incur a measurable performance impact. RLMLogLevelDebug, /// Log information that can aid in debugging. More events will be logged than with `RLMLogLevelDebug`. /// /// - warning: Will incur a measurable performance impact. RLMLogLevelTrace, /// Log information that can aid in debugging. More events will be logged than with `RLMLogLevelTrace`. /// /// - warning: Will incur a measurable performance impact. RLMLogLevelAll } NS_SWIFT_NAME(LogLevel); /// A log callback function which can be set on RLMLogger. /// /// The log function may be called from multiple threads simultaneously, and is /// responsible for performing its own synchronization if any is required. RLM_SWIFT_SENDABLE // invoked on a background thread typedef void (^RLMLogFunction)(RLMLogLevel level, NSString *message); /** `RLMLogger` is used for creating your own custom logging logic. You can define your own logger creating an instance of `RLMLogger` and define the log function which will be invoked whenever there is a log message. Set this custom logger as you default logger using `setDefaultLogger`. RLMLogger.defaultLogger = [[RLMLogger alloc] initWithLevel:RLMLogLevelDebug logFunction:^(RLMLogLevel level, NSString * message) { NSLog(@"Realm Log - %lu, %@", (unsigned long)level, message); }]; @note By default default log threshold level is `RLMLogLevelInfo`, and logging strings are output to Apple System Logger. */ @interface RLMLogger : NSObject /** Gets the logging threshold level used by the logger. */ @property (nonatomic) RLMLogLevel level; /// :nodoc: - (instancetype)init NS_UNAVAILABLE; /** Creates a logger with the associated log level and the logic function to define your own logging logic. @param level The log level to be set for the logger. @param logFunction The log function which will be invoked whenever there is a log message. */ - (instancetype)initWithLevel:(RLMLogLevel)level logFunction:(RLMLogFunction)logFunction; #pragma mark RLMLogger Default Logger API /** The current default logger. When setting a logger as default, this logger will be used whenever information must be logged. */ @property (class) RLMLogger *defaultLogger NS_SWIFT_NAME(shared); @end RLM_HEADER_AUDIT_END(nullability)