SwiftyLogger 2.1.0

SwiftyLogger 2.1.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年10月
SwiftSwift 版本3.2
SPM支持 SPM

Michał Tynior 维护。



#SwiftyLogger

SwiftyLogger 是用 Swift 编写的灵活的日志抽象。

要求

  • iOS 9.0+ / Mac OS X 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 8.0+

##集成

####CocoaPods
您可以使用 CocoaPods 通过将其添加到您的 Podfile 中来安装 SwiftyLogger

platform :ios, '9.0'
use_frameworks!

target 'MyApp' do
	pod 'SwiftyLogger'
end

运行 pod installpod update 将 Pods 集成到您的项目中。

运行 carthage update build 框架,并将构建的 SwiftyLogger.framework 拖到您的 Xcode 项目中。

Swift 包管理器 (SPM)

您可以通过将 SwiftyLogger 添加到您的 Package.swift 文件中来使用 Swift 包管理器 安装 SwiftyLogger

import PackageDescription

let package = Package(
    name: "MyApp",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/mtynior/SwiftyLogger.git",  majorVersion: 2)
    ]
)

用法

#import SwiftyLogger

let loggerFactory = DefaultLoggerFactory().addCosole().addFile()
let logger = loggerFactory.makeLogger()
       
logger.logDebug("Debug log")
logger.logVerbose("Verbose log")
logger.logInfo("Information log")
logger.logWarning("Warrning log")
logger.logError("Error log")
logger.logCritical("Critical log")

可用的日志函数

logDebug(message: "Debug log")
logDebug(message: "Debug log", file: "Main.swift")
logDebug(message: "Debug log", file: "Main.swift", function: "show()")
logDebug(message: "Debug log", file: "Main.swift", function: "show()", line: 21)
logDebug(message: "Debug log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logDebug(message: "Debug log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")
logVerbose(message: "Verbose log")
logVerbose(message: "Verbose log", file: "Main.swift")
logVerbose(message: "Verbose log", file: "Main.swift", function: "show()")
logVerbose(message: "Verbose log", file: "Main.swift", function: "show()", line: 21)
logVerbose(message: "Verbose log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logVerbose(message: "Verbose log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")
logInfo(message: "Info log")
logInfo(message: "Info log", file: "Main.swift")
logInfo(message: "Info log", file: "Main.swift", function: "show()")
logInfo(message: "Info log", file: "Main.swift", function: "show()", line: 21)
logInfo(message: "Info log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logInfo(message: "Info log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")
logWarning(message: "Warrning log")
logWarning(message: "Warrning log", file: "Main.swift")
logWarning(message: "Warrning log", file: "Main.swift", function: "show()")
logWarning(message: "Warrning log", file: "Main.swift", function: "show()", line: 21)
logWarning(message: "Warrning log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logWarning(message: "Warrning log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")
logError(message: "Error log")
logError(message: "Error log", file: "Main.swift")
logError(message: "Error log", file: "Main.swift", function: "show()")
logError(message: "Error log", file: "Main.swift", function: "show()", line: 21)
logError(message: "Error log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logError(message: "Error log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")
logCritical(message: "Critical log")
logCritical(message: "Critical log", file: "Main.swift")
logCritical(message: "Critical log", file: "Main.swift", function: "show()")
logCritical(message: "Critical log", file: "Main.swift", function: "show()", line: 21)
logCritical(message: "Critical log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate())
logCritical(message: "Critical log", file: "Main.swift", function: "show()", line: 21, timestamp: NSDate(), threadName: "Main")

最小日志等级

默认情况下,最小日志等级设置为 LogLevel.debug

如果您想为所有日志目标全局更改最小日志等级,那么设置 LoggerFactory.minimumLogLevel 属性

let loggerFactory = DefaultLoggerFactory()
loggerFactory.minimumLogLevel = LogLevel.info

您可以使用 LoggerTarget.minimumLogLevel 更改特定目标的最低日志等级。如果为特定日志目标定义了最小日志等级,则忽略全局 LoggerFactory.minimumLogLevel

let consoleLogger = ConsoleLogger()
consoleLogger.minimumLogLevel = .Debug

let fileLogger = FileLogger()
fileLogger.minimumLogLevel = .Error

let loggerFactory = DefaultLoggerFactory().addTarget(consoleLogger).addTarget(fileLogger)

消息格式化器

如果您想为所有日志目标更改消息格式化器,那么设置 LoggerFactory.messageFormatter 属性

let loggerFactory = DefaultLoggerFactory()
loggerFactory.messageFormatter = ShortMessageFormatter()

您可以使用 LoggerTarget.messageFormatter 更改特定目标的消息格式化器。如果为特定日志目标定义了消息格式化器,则忽略全局 LoggerFactory.messageFormatter

let loggerFactory = DefaultLoggerFactory()
loggerFactory.messageFormatter = LongMessageFormatter() // 

let consoleLogger = ConsoleLogger()
consoleLogger.messageFormatter = ShortMessageFormatter() // console logger is using the ShortMessageFormatter

let fileLogger = FileLogger()  // file logger is using global LongMessageFormatter

loggerFactory.addTarget(consoleLogger).addTarget(fileLogger)

异步日志目标

默认情况下,所有日志目标都是异步的。如果您需要同步目标,可以使用 LoggerTarget.isAsync 属性

let consoleLogger = ConsoleLogger()   // console logger is asynchronous by default
consoleLogger.isAsync = false         // now logger is synchronous

消息格式化器

默认情况下,LoggerFactory 有一个生成以下输出的格式化器

[2015-12-12 20:06:45:45.345][Info] Hello world

如果您想更改日志消息的格式,您必须创建自己的格式化器。自定义格式化器的唯一要求是符合 LogMessageFormatter 协议。

以下示例显示了如何创建自定义消息格式化器

public final class MyLogFormatter: LogMessageFormatter {
    
    public func formatMessage(logMessage: LogMessage) -> String {
    	return "<\(logMessage.logLevel)> " + logMessage.message
    }
    
}

在工厂中设置格式化器

let loggerFactory = DefaultLoggerFactory()
loggerFactory.messageFormatter = MyLogFormatter()

现在 loggerFactory 将生成以下输出

<Info> Hello world

###控制台日志记录器

默认的控制台日志记录器使用 print 函数显示日志消息。

let consoleLogger = ConsoleLogger()
let loggerFactory = DefaultLoggerFactory().addTarget(consoleLogger)
// or 
let loggerFactory = DefaultLoggerFactory().addConsole()

###文件日志记录器

默认情况下,文件日志记录器将日志消息保存在 Caches 文件夹中的 application.log 文件中。

let fileLogger = FileLogger()
let loggerFactory = DefaultLoggerFactory().addTarget(fileLogger)
// or 
let loggerFactory = DefaultLoggerFactory().addFile()

您可以指定日志文件名

let fileLogger = FileLogger(fileName: "myFile.log")
let loggerFactory = DefaultLoggerFactory().addTarget(fileLogger)
// or 
let loggerFactory = DefaultLoggerFactory().addFile("myFile.log")

您还可以指定日志文件的显式路径

let url = URL(path: "/path/to/file.log")
let fileLogger = FileLogger(fileURL: url)
let loggerFactory = DefaultLoggerFactory().addTarget(fileLogger)
// or 
let url = URL(path: "/path/to/file.log")
let loggerFactory = DefaultLoggerFactory().addFile(url)

默认情况下,日志文件的最大大小为1MB。您可以通过使用《code>FileLogger.maximumFileSizeInBytes属性来更改它。

自定义日志记录器

SwiftyLogger旨在处理自定义日志记录器。创建一个最快的方式是通过从《code>BaseLoggerTarget类继承。

public class MyLogger: BaseLoggerTarget {
    
    public override func log(formattedMessage: String) {
        print(formattedMessage, separator: "", terminator: "\n")
    }

}

如果您不喜欢继承,或者想要更多控制,可以通过符合《code>LoggerTarget协议来显式创建日志记录器。
下面的示例展示了如何显式创建自定义日志记录器

public class MyLogger: LoggerTarget {
    
    public var minimumLogLevel: LogLevel?
    
    public var messageFormatter: LogMessageFormatter?
    
    public var isAsync: Bool
    
    public var queue: DispatchQueue
    
     public init() {
        self.isAsync = true
        
        let uuid = UUID()
        self.queue = DispatchQueue(label:  uuid.uuidString)
    }

    public func log(formattedMessage: String, details: LogMessage) {
        print(formattedMessage, separator: "", terminator: "\n")
    }
    
}

就这样了。现在您可以将您的日志记录器添加到工厂中

let myLogger = MyLogger()
let loggerFactory = DefaultLoggerFactory().addTarget(myLogger)

为了让事情更加简单,您可以扩展《code>LoggerFactory协议

public func addMyLogger()  -> LoggerFactory {
	self.addTarget(MyLogger())
   	return self
}

现在您可以使用流畅的API将您的日志记录器添加到工厂

let loggerFactory = DefaultLoggerFactory().addMyLogger()

##许可证

SwiftyLogger遵循MIT许可证发布。请参阅LICENSE文件以获取详细信息。