Skip to content
This repository has been archived by the owner on Dec 4, 2017. It is now read-only.

Commit

Permalink
Merge branch 'swift3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
justin committed Sep 7, 2016
2 parents df2454c + 3a03c29 commit 06f273f
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 116 deletions.
8 changes: 4 additions & 4 deletions Aspen.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -721,7 +721,7 @@
PRODUCT_NAME = Aspen;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -743,7 +743,7 @@
PRODUCT_NAME = Aspen;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand All @@ -761,7 +761,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "AspenTests/AspenTests-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -775,7 +775,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "AspenTests/AspenTests-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand Down
16 changes: 8 additions & 8 deletions Aspen/Aspen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,24 @@ import Foundation

public final class Aspen: NSObject
{
static var globalLogger = Logger(name: "Shared", level: .Info)
static var globalLogger = Logger(name: "Shared", level: .info)

public class func registerLogger(logger: LogInterface) {
public class func registerLogger(_ logger: LogInterface) {
globalLogger.registerLogger(logger)
}

public class func setLoggingLevel(level: DefaultLogLevel) {
public class func setLoggingLevel(_ level: DefaultLogLevel) {
globalLogger.setLoggingLevel(level)
}

public class func getLogger(logName:String, level:DefaultLogLevel) -> Logger {
public class func getLogger(_ logName:String, level:DefaultLogLevel) -> Logger {
let logger = Logger(name: logName, level: level)
logger.activeLoggers += globalLogger.activeLoggers
return logger
}
}

public func aspenVerbose(@autoclosure message: () -> String) { Aspen.globalLogger.verbose(message) }
public func aspenInfo(@autoclosure message: () -> String) { Aspen.globalLogger.info(message) }
public func aspenWarn(@autoclosure message: () -> String) { Aspen.globalLogger.warn(message) }
public func aspenError(@autoclosure message: () -> String) { Aspen.globalLogger.error(message) }
public func aspenVerbose( _ message: @autoclosure () -> String) { Aspen.globalLogger.verbose(message) }
public func aspenInfo( _ message: @autoclosure () -> String) { Aspen.globalLogger.info(message) }
public func aspenWarn( _ message: @autoclosure () -> String) { Aspen.globalLogger.warn(message) }
public func aspenError( _ message: @autoclosure () -> String) { Aspen.globalLogger.error(message) }
4 changes: 2 additions & 2 deletions Aspen/AspenHelpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ import Foundation
*/
extension Aspen {
@objc(willLog:)
public class func willLog(level: DefaultLogLevel) -> Bool { return self.globalLogger.willLog(level) }
public class func willLog(_ level: DefaultLogLevel) -> Bool { return self.globalLogger.willLog(level) }

@objc(logWithLevel:message:)
public class func log(level: DefaultLogLevel, message: String!) { self.globalLogger.logFormatted(level, message: message) }
public class func log(_ level: DefaultLogLevel, message: String!) { self.globalLogger.logFormatted(level, message: message) }
}
4 changes: 2 additions & 2 deletions Aspen/ConsoleLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public final class ConsoleLogger: NSObject, LogInterface {
super.init()
}

public func log(message: String) {
public func log(_ message: String) {
print(message)
}
}
}
45 changes: 22 additions & 23 deletions Aspen/FileLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,41 +23,40 @@
import Foundation

public final class FileLogger: NSObject, LogInterface {
public var fileURL:NSURL?
public var fileURL:URL?

private var fileHandle:NSFileHandle?
private var fileHandle:FileHandle?

public override init() {
super.init()
let locale = NSLocale(localeIdentifier: "en_US_POSIX")
let locale = Locale(identifier: "en_US_POSIX")

let timeFormatter = NSDateFormatter()
let timeFormatter = DateFormatter()
timeFormatter.locale = locale
timeFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let dateString = timeFormatter.stringFromDate(NSDate())
let dateString = timeFormatter.string(from: Date())

let fm = NSFileManager.defaultManager()
let urls = fm.URLsForDirectory(.LibraryDirectory, inDomains: .UserDomainMask)
let fm = FileManager.default

let urls = fm.urls(for: .libraryDirectory, in: .userDomainMask)
guard let url = urls.last else { return }

if let p = url.path {
let path = NSURL.fileURLWithPath("\(p)/Logs/\(dateString).log")
fileURL = path
openFile()
}
let path = URL.init(fileURLWithPath: "\(url.path)/Logs/\(dateString).log")
fileURL = path
openFile()
}

deinit {
closeFile()
}

public func log(message: String) {
public func log(_ message: String) {
if let handle = fileHandle {
handle.seekToEndOfFile()
let messageWithNewLine = "\(message)\n"
if let data = messageWithNewLine.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
if let data = messageWithNewLine.data(using: String.Encoding.utf8, allowLossyConversion: false) {
let exception = tryBlock {
handle.writeData(data)
handle.write(data)
}
if exception != nil {
print("Error writing to log file \(exception)")
Expand All @@ -67,17 +66,18 @@ public final class FileLogger: NSObject, LogInterface {
}

private func openFile() {
let fm = NSFileManager.defaultManager()
if let URL = fileURL, filePath = URL.path {
if fm.fileExistsAtPath(filePath) == false {
let fm = FileManager.default
if let URL = fileURL {
let filePath = URL.path
if fm.fileExists(atPath: filePath) == false {
do {
try fm.createDirectoryAtURL(URL.URLByDeletingLastPathComponent!, withIntermediateDirectories: true, attributes: nil)
try fm.createDirectory(at: URL.deletingLastPathComponent(), withIntermediateDirectories: true, attributes: nil)
} catch _ { }
fm.createFileAtPath(filePath, contents: nil, attributes: nil)
fm.createFile(atPath: filePath, contents: nil, attributes: nil)
}

do {
fileHandle = try NSFileHandle(forWritingToURL: URL)
fileHandle = try FileHandle(forWritingTo: URL)
} catch {
print("Error opening log file \(error)")
fileHandle = nil
Expand All @@ -91,5 +91,4 @@ public final class FileLogger: NSObject, LogInterface {
}
fileHandle = nil
}

}
}
12 changes: 6 additions & 6 deletions Aspen/LogFormatter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,24 @@
import Foundation

public final class LogFormatter: NSObject {
public var timeFormatter:NSDateFormatter
public var timeFormatter:DateFormatter

public override init() {
let locale = NSLocale(localeIdentifier: "en_US_POSIX")
let locale = Locale(identifier: "en_US_POSIX")

timeFormatter = NSDateFormatter()
timeFormatter = DateFormatter()
timeFormatter.locale = locale
timeFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"

super.init()
}

public func formatLog(level: DefaultLogLevel, message: String) -> String {
public func formatLog(_ level: DefaultLogLevel, message: String) -> String {
let logLevel = LogLevel.getLevel(level)
let levelName = logLevel.label
let emoji = logLevel.emojiIdentifier()
let now = NSDate()
let timeString = timeFormatter.stringFromDate(now)
let now = Date()
let timeString = timeFormatter.string(from: now)

return "\(timeString) — [\(emoji)\(levelName)\(emoji)] \(message)"
}
Expand Down
2 changes: 1 addition & 1 deletion Aspen/LogInterface.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ import Foundation

@objc
public protocol LogInterface {
func log(message: String)
func log(_ message: String)
}
38 changes: 19 additions & 19 deletions Aspen/LogLevel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,21 @@ import Foundation

@objc
public enum DefaultLogLevel: Int {
case Verbose = 200
case Info = 300
case Warning = 400
case Error = 500
case verbose = 200
case info = 300
case warning = 400
case error = 500
}

public final class LogLevel: NSObject {
public var level: DefaultLogLevel
public var name: String
public var label: String

internal static let VERBOSE_LEVEL = LogLevel.create(.Verbose, name: "Verbose Level", label: "VERBOSE")
internal static let INFO_LEVEL = LogLevel.create(.Info, name: "Info Level", label: "INFO")
internal static let WARNING_LEVEL = LogLevel.create(.Warning, name: "Warning Level", label: "WARN")
internal static let ERROR_LEVEL = LogLevel.create(.Error, name: "Error Level", label: "ERROR")
internal static let VERBOSE_LEVEL = LogLevel.create(.verbose, name: "Verbose Level", label: "VERBOSE")
internal static let INFO_LEVEL = LogLevel.create(.info, name: "Info Level", label: "INFO")
internal static let WARNING_LEVEL = LogLevel.create(.warning, name: "Warning Level", label: "WARN")
internal static let ERROR_LEVEL = LogLevel.create(.error, name: "Error Level", label: "ERROR")

public init(level: DefaultLogLevel, name: String, label: String) {
self.level = level
Expand All @@ -48,33 +48,33 @@ public final class LogLevel: NSObject {
super.init()
}

public static func getLevel(level:DefaultLogLevel) -> LogLevel {
public static func getLevel(_ level:DefaultLogLevel) -> LogLevel {
switch level {
case .Verbose:
case .verbose:
return VERBOSE_LEVEL
case .Info:
case .info:
return INFO_LEVEL
case .Warning:
case .warning:
return WARNING_LEVEL
case .Error:
case .error:
return ERROR_LEVEL
}
}

public func emojiIdentifier() -> String {
switch level {
case .Verbose:
case .verbose:
return "🚧"
case .Info:
case .info:
return "☝️"
case .Warning:
case .warning:
return "⚠️"
case .Error:
case .error:
return "🚨"
}
}

private static func create(level: DefaultLogLevel, name: String, label: String) -> LogLevel {
private static func create(_ level: DefaultLogLevel, name: String, label: String) -> LogLevel {
return LogLevel(level:level, name: name, label: label)
}
}
}
34 changes: 17 additions & 17 deletions Aspen/Logger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,33 +30,33 @@ public final class Logger: NSObject {

internal var activeLoggers = Array<LogInterface>()

private let queue = dispatch_queue_create("com.secondgear.AspenQueue", DISPATCH_QUEUE_SERIAL)
private let queue = DispatchQueue(label: "com.secondgear.AspenQueue", attributes: [])

override init() {
fatalError("Please use init(name:, level:) to initialize a new Logger instance")
}

public init(name: String, level: DefaultLogLevel = .Info) {
public init(name: String, level: DefaultLogLevel = .info) {
self.name = name
self.level = LogLevel.getLevel(level)
self.formatter = LogFormatter()

super.init()
}

public func registerLogger(logger: LogInterface) {
public func registerLogger(_ logger: LogInterface) {
activeLoggers.append(logger)
}

public func setLoggingLevel(level: DefaultLogLevel) {
public func setLoggingLevel(_ level: DefaultLogLevel) {
self.level = LogLevel.getLevel(level)
}

func willLog(logLevel: DefaultLogLevel) -> Bool {
func willLog(_ logLevel: DefaultLogLevel) -> Bool {
return logLevel.rawValue >= level.level.rawValue
}

func log(logLevel: DefaultLogLevel, @autoclosure message: () -> String) {
func log(_ logLevel: DefaultLogLevel, message: @autoclosure () -> String) {
// Don't bother trying to log something with no loggers registered.
guard activeLoggers.count > 0 else {
print("*** WARNING: log(\(logLevel.rawValue)) invoked with no loggers registered. If you're expecting file logging for forensic purposes, you're losing data. Message was '\(message())'")
Expand All @@ -67,33 +67,33 @@ public final class Logger: NSObject {
let constMessage = message()

activeLoggers.forEach { logger in
dispatch_async(queue) {
queue.async {
logger.log(constMessage)
}
}
}
}

func logFormatted(logLevel: DefaultLogLevel, @autoclosure message: () -> String) {
func logFormatted(_ logLevel: DefaultLogLevel, message: @autoclosure () -> String) {
log(logLevel, message: formatter.formatLog(logLevel, message: message()))
}
}

/** Convenience / shorthand logging functions for predefined log levels. */
extension Logger {
public func verbose(@autoclosure message: () -> String) {
logFormatted(.Verbose, message: message)
public func verbose( _ message: @autoclosure () -> String) {
logFormatted(.verbose, message: message)
}

public func info(@autoclosure message: () -> String) {
logFormatted(.Info, message: message)
public func info( _ message: @autoclosure () -> String) {
logFormatted(.info, message: message)
}

public func warn(@autoclosure message: () -> String) {
logFormatted(.Warning, message: message)
public func warn( _ message: @autoclosure () -> String) {
logFormatted(.warning, message: message)
}

public func error(@autoclosure message: () -> String) {
logFormatted(.Error, message: message)
public func error( _ message: @autoclosure () -> String) {
logFormatted(.error, message: message)
}
}
}
2 changes: 0 additions & 2 deletions AspenTests/AspenHelperTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
@import XCTest;
@import Aspen;

#import "AspenTests-Swift.h"

@interface TestObjectPass : NSObject
@end
@implementation TestObjectPass
Expand Down

0 comments on commit 06f273f

Please sign in to comment.