     /// If set to `false`, the internal BMSCore debug logs will not be displayed on the console.
     public static var sdkDebugLoggingEnabled: Bool = true
     
+    // Used to persist all logs to the device's file system
+    // This can only be set by the BMSAnalytics framework
+    public static var logSaver: LogSaverProtocol?
+    
     
     
     // MARK: Properties (internal/private)
     
     // Each logger instance is distinguished only by its "name" property
     internal static var loggerInstances: [String: Logger] = [:]
-
+    
     
     
     // MARK: Initializers

    // MARK: Log methods (API)
    
    /**
     Log at the Debug LogLevel.
     
     - parameter message: The message to log
     
     - Note: Do not supply values for the `file`, `function`, or `line` parameters. These parameters take default values to automatically record the file, function, and line in which this method was called.
     */
    public func debug(message: String, file: String = __FILE__, function: String = __FUNCTION__, line: Int = __LINE__) {
        
        logMessage(message, level: LogLevel.Debug, calledFile: file, calledFunction: function, calledLineNumber: line)

        logMessage(message, level: LogLevel.Fatal, calledFile: file, calledFunction: function, calledLineNumber: line)
    }
    
    
    
    // MARK: Logging implementation
    
    // This is the master function that handles all of the logging, including level checking, printing to console, and writing to file
    // All other log functions below this one are helpers for this function
    public func logMessage(message: String, level: LogLevel, calledFile: String, calledFunction: String, calledLineNumber: Int, additionalMetadata: [String: AnyObject]? = nil) {
