Puppy alternatives and similar libraries
Based on the "Logging" category.
Alternatively, view Puppy alternatives based on common mentions on social networks and blogs.
-
SwiftyBeaver
Convenient & secure logging during development & release in Swift 4 & 5 -
XCGLogger
A debug log framework for use in Swift projects. Allows you to log details to the console (and optionally a file), just like you would have with NSLog() or print(), but with additional information, such as the date, function name, filename and line number. -
Dotzu
Debbuger tool for iOS developer. Display logs, network request, device informations, crash logs while using the app. -
TinyConsole
📱💬🚦 TinyConsole is a micro-console that can help you log and display information inside an iOS application, where having a connection to a development computer is not possible. -
CleanroomLogger
CleanroomLogger provides an extensible Swift-based logging API that is simple, lightweight and performant -
Willow
Willow is a powerful, yet lightweight logging library written in Swift. -
WatchdogInspector
Shows your current framerate (fps) in the status bar of your iOS app -
Duration
A simple Swift package for measuring and reporting the time taken for operations -
Puree
[Obsoleted] A log collector for iOS (new version! -> https://github.com/cookpad/Puree-Swift) -
Atlantis
A powerful input-agnostic swift logging framework made to speed up development with maximum readability. -
AEConsole
Customizable Console UI overlay with debug log on top of your iOS App -
CleanroomASL
A Swift-based API for reading from & writing to the Apple System Log (more commonly known somewhat inaccurately as "the console") -
TraceLog
TraceLog is a highly configurable, flexible, portable, and simple to use debug logging system for Swift and Objective-C applications running on Linux, macOS, iOS, watchOS, and tvOS. -
AELog
Simple, lightweight and flexible debug logging framework written in Swift
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Puppy or a related project?
README
Puppy
Puppy is a flexible logging library written in Swift 🐶
It supports multiple transports(console, file, syslog, and oslog) as loggers. It not only works alone, but also as a backend for apple/swift-log.
Furthermore, it has file log rotation feature and you can also customize the log format as you like. And it supports cross-platform(Darwin, Linux, and Windows).
Features
- Written in Swift.
- Supports cross-platform(Darwin, Linux, and Windows).
- Supports console, file, syslog, and oslog as loggers.
- Supports automatic log rotation about file logger.
- Also Works as a backend for
apple/swift-log
.
Examples
Basic Usage
Logging to mutliple transports(e.g. console and file). It is recommended that the first argument of each logger be a unique reverse-order FQDN since it is also used internally for a DispatchQueue
's label.
import Puppy
let console = ConsoleLogger("com.example.yourapp.console")
let fileURL = URL(fileURLWithPath: "./foo.log").absoluteURL
let file = FileLogger("com.example.yourapp.file",
fileURL: fileURL,
filePermission: "600") // Default permission is "640".
let log = Puppy()
// Set the logging level.
log.add(console, withLevel: .warning)
log.add(file, withLevel: .warning)
log.debug("DEBUG message") // Will NOT be logged.
log.error("ERROR message") // Will be logged.
Use with apple/swift-log
Logging to mutliple transports(e.g. console and syslog) as a backend for apple/swift-log
.
import Puppy
import Logging
let console = ConsoleLogger("com.example.yourapp.console")
let syslog = SystemLogger("com.example.yourapp.syslog")
let puppy = Puppy.default
puppy.add(console)
puppy.add(syslog)
LoggingSystem.bootstrap {
var handler = PuppyLogHandler(label: $0, puppy: puppy)
// Set the logging level.
handler.logLevel = .trace
return handler
}
let log = Logger(label: "com.example.yourapp.swiftlog")
log.trace("TRACE message") // Will be logged.
log.debug("DEBUG message") // Will be logged.
Use file log rotation
Logging to file and use log rotation feature.
import Puppy
class ViewController: UIViewController {
let delegate = SampleFileRotationDelegate()
override func viewDidLoad() {
super.viewDidLoad()
let fileRotation = try! FileRotationLogger("com.example.yourapp.filerotation",
fileURL: "./logs/foo.log")
fileRotation.suffixExtension = .date_uuid // Default option is `.numbering`.
fileRotation.maxFileSize = 10 * 1024 * 1024
fileRotation.maxArchivedFilesCount = 5
fileRotation.delegate = delegate
let log = Puppy()
log.add(fileRotation)
log.info("INFO message")
log.warning("WARNING message")
}
}
class SampleFileRotationDelegate: FileRotationLoggerDeletate {
func fileRotationLogger(_ fileRotationLogger: FileRotationLogger,
didArchiveFileURL: URL, toFileURL: URL) {
print("didArchiveFileURL: \(didArchiveFileURL), toFileURL: \(toFileURL)")
}
func fileRotationLogger(_ fileRotationLogger: FileRotationLogger,
didRemoveArchivedFileURL: URL) {
print("didRemoveArchivedFileURL: \(didRemoveArchivedFileURL)")
}
}
Customize the log format
Customize the log format using Formattable
protocol. Logging to oslog for example.
import Puppy
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let oslog = OSLogger("com.yourapp.oslog")
oslog.format = LogFormatter()
let log = Puppy()
log.add(oslog)
log.info("INFO message")
log.warning("WARNING message")
}
}
class LogFormatter: LogFormattable {
func formatMessage(_ level: LogLevel, message: String, tag: String, function: String,
file: String, line: UInt, swiftLogInfo: [String : String],
label: String, date: Date, threadID: UInt64) -> String {
let date = dateFormatter(date)
let file = shortFileName(file)
return "\(date) \(threadID) [\(level.emoji) \(level)] \(file)#L.\(line) \(function) \(message)"
}
}
Create a custom logger
You can create your own custom logger. All you have to do is inherit BaseLogger
class and override log(_:string:)
method.
import Puppy
class CustomLogger: BaseLogger {
override func log(_ level: LogLevel, string: String) {
// Implements the logging feature here.
}
}
License
Puppy is available under the MIT license. See the LICENSE file for details.
*Note that all licence references and agreements mentioned in the Puppy README section above
are relevant to that project's source code only.