测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年10月 |
SwiftSwift 版本 | 3.2 |
SPM支持 SPM | ✓ |
由 Michał Tynior 维护。
#SwiftyLogger
SwiftyLogger 是用 Swift 编写的灵活的日志抽象。
##集成
####CocoaPods
您可以使用 CocoaPods 通过将其添加到您的 Podfile
中来安装 SwiftyLogger
platform :ios, '9.0'
use_frameworks!
target 'MyApp' do
pod 'SwiftyLogger'
end
运行 pod install
或 pod update
将 Pods 集成到您的项目中。
运行 carthage update
build 框架,并将构建的 SwiftyLogger.framework
拖到您的 Xcode 项目中。
您可以通过将 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文件以获取详细信息。