     private var _nextFileNumber: Int = 1
     /**The prefix for files created by the logger*/
     private let _logFileNamePrefix: String = "log_"
-    //todo: implement this so we can prevent crashing later and switch to debug logging
-    /**Determines if logging can occur. This is set to false if problems were encountered during initialization*/
-    private var _canLog: Bool = true
+    private let _delegate: SwiftLoggerDelegate?
+    //log levels. you might be asking... why ERRR and FATL? it's because im kinda OCD about how the log looks and this makes everything line up vertically.
+    private let _LOGLEVEL_INFO =     "INFO"
+    private let _LOGLEVEL_DEBUG =    "DEBG"
+    private let _LOGLEVEL_WARN =     "WARN"
+    private let _LOGLEVEL_ERROR =    "ERRR"
+    private let _LOGLEVEL_FATAL =    "FATL"
     
     /**
         Creates an instance of the logger
     
         - Parameter directory: The directory in which to save log files. Defaults to `.ApplicationSupportDirectory`.
         - Parameter domain: The file system domain to search for the directory. Defaults to `.UserDomainMask`.
-        - Parameter explodeOnFailureToInit: If true, a fatal error will occur if the initialization fails. Defaults to true assuming that the application is dependent on logging. If this is not the case, simply use false here, and only `debugPrint` will be advise you that no logging will occur.
+        - Parameter explodeOnFailureToInit: If true, a fatal error will occur if the initialization fails. Defaults to true assuming that the application is dependent on logging. If this is not the case, simply use false here, and only `debugPrint` will be advise you that no logging will occur, denoted by "SWIFTLOGGER-NOLOG".
         - Parameter fileSize: The size of the tail before writing a disk, in bytes, this is effectively the size of each file
     */
     init(
+        delegate: SwiftLoggerDelegate? = nil,
         directory: NSSearchPathDirectory = .ApplicationSupportDirectory,
         domain: NSSearchPathDomainMask = .UserDomainMask,
         explodeOnFailureToInit: Bool = true,
         fileSize: Int = 1000) {
+            self._delegate = delegate
             self._fileSize = fileSize
             //create the logging directory
             let topDirectory: NSString = NSSearchPathForDirectoriesInDomains(directory, .UserDomainMask, true).first!

    /**
        Prepares a batch of message to be written by formatting them and then writes the batch to the log file.
    
        - Parameter logLevel: The log level for the batch of messages.
        - Parameter timestamp: The time at which the logger was called to process a logging event.
        - Parameter messages: The unformatted messages to log.
    */
    private func _formatAndWrite(logLevel: LogLevelTypes, timestamp: NSDate, messages: [String]) {
        /*EXPECTED FORMAT
        INFO:01/23/16 13:45:123456 PDT
        >this is the first in the batch

                    fatalError("SWIFTLOGGER failed getting current contents of logging directory due to: \(error)")
                } else {
                    debugPrint("SWIFTLOGGER", "no logging will occur, due to the failure above.")
                    self.loggingIsActive = false
                }
            }
            if let lf = lastFile where lf != "" {
