Skip to content

Instantly share code, notes, and snippets.

@bpoplauschi
Created June 1, 2016 11:47
Show Gist options
  • Save bpoplauschi/4856ac999d6cc8fe419b158dcc67ff91 to your computer and use it in GitHub Desktop.
Save bpoplauschi/4856ac999d6cc8fe419b158dcc67ff91 to your computer and use it in GitHub Desktop.
Lumberjack Custom LogFormatter
public class CustomLogFormatter: DDDispatchQueueLogFormatter {
// MARK: Constants
static let kShortDateFormat = "HH:mm:ss.SSS"
static let kLongDateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
let loggerType: LoggerType
let threadUnsafeDateFormatter: NSDateFormatter
public init(loggerType: LoggerType) {
self.loggerType = loggerType
self.threadUnsafeDateFormatter = NSDateFormatter()
super.init()
configureDateFormatter(self.threadUnsafeDateFormatter)
}
override public func configureDateFormatter(dateFormatter: NSDateFormatter!) {
dateFormatter.formatterBehavior = .BehaviorDefault
dateFormatter.dateFormat = (self.loggerType == .TTY) ? CustomLogFormatter.kShortDateFormat: CustomLogFormatter.kLongDateFormat
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
}
override public func stringFromDate(date: NSDate!) -> String! {
return threadUnsafeDateFormatter.stringFromDate(date)
}
override public func formatLogMessage(logMessage: DDLogMessage!) -> String! {
let dateAndTime = self.stringFromDate(logMessage.timestamp)
let logLevelLetter: String
switch logMessage.flag {
case DDLogFlag.Error: logLevelLetter = "E"
case DDLogFlag.Warning: logLevelLetter = "W"
case DDLogFlag.Info: logLevelLetter = "I"
case DDLogFlag.Debug: logLevelLetter = "D"
case DDLogFlag.Verbose: logLevelLetter = "V"
default: logLevelLetter = "?"
}
let queueThreadLabel = self.queueThreadLabelForLogMessage(logMessage)
let formatterLogString: String
switch self.loggerType {
case .TTY, .File:
formatterLogString = "\(dateAndTime) [\(queueThreadLabel)] |\(logLevelLetter)| [\(logMessage.fileName) \(logMessage.function)]#\(logMessage.line): \(logMessage.message)"
case .ASL:
formatterLogString = "[\(queueThreadLabel)] |\(logLevelLetter)| \(logMessage.fileName): \(logMessage.message)"
case .Crashlytics:
formatterLogString = "|\(logLevelLetter)| [\(queueThreadLabel)] [\(logMessage.fileName) \(logMessage.function)]#\(logMessage.line): \(logMessage.message)"
}
return formatterLogString
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment