A modern, flexible logging tool

Related tags

Logging NSLogger
Overview

NSLogger

BuddyBuild Pod Version Carthage compatible Pod Platform Pod License Reference Status

NSLogger is a high performance logging utility which displays traces emitted by client applications running on macOS, iOS and Android. It replaces traditional console logging traces (NSLog(), Java Log).

The NSLogger Viewer runs on macOS and replaces Xcode, Android Studio or Eclipse consoles. It provides powerful additions like display filtering, defining log domain and level, image and binary logging, message coloring, traces buffering, timing information, link with source code, etc.

NSLogger feature summary:

  • View logs using the desktop application
  • Logs can be sent from device or simulator
  • Accept connections from local network clients (using Bonjour) or remote clients connecting directly over the internet
  • Online (application running and connected to NSLogger) and offline (saved logs) log viewing
  • Buffer all traces in memory or in a file, send them over to viewer when a connection is acquired
  • Define a log domain (app, view, model, controller, network…) and an importance level (error, warning, debug, noise…)
  • Color the log messages using regexp
  • Log images or raw binary data
  • Secure logging (connections use SSL by default)
  • Advanced log filtering options
  • Save viewer logs to share them and/or review them later
  • Export logs to text files
  • Open raw buffered traces files that you brought back from client applications not directly connected to the log viewer

Here is what it looks like in action:

And with macOS Mojave and later's dark mode:

Basic Usage

Without any change to your code, all the NSLog() logs from your application are redirected to the NSLogger desktop viewer. The viewer is found automatically on your network, using Bonjour.

A rich API lets you log messages, binary data or images with a lot of detail. Simple wrappers are available for your convenience:

Swift wrapper API:

import NSLogger

[]

// logging some messages
Logger.shared.log(.network, .info, "Checking paper level…")

// logging image
Logger.shared.log(.view, .noise, myPrettyImage)

// logging data
Logger.shared.log(.custom("My Domain"), .noise, someDataObject)

Objective-C wrapper API:

#import <NSLogger/NSLogger.h>

[…]

LoggerApp(1, @"Hello world! Today is: %@", [self myDate]);
LoggerNetwork(1, @"Hello world! Today is: %@", [self myDate]);

Installation

  • Step 1. Download the NSLogger desktop app on your Mac.
  • Step 2. Add the NSLogger framework to your project.
  • Step 3. There is no step 3…

Desktop Viewer Download

Download the pre-built, signed version of the NSLogger desktop viewer for macOS. Don't forget to launch the application on your Mac. It won't show a window until a client connects to it and starts logging.

Client Framework Install

CocoaPods Install

If your project is configured to use CocoaPods, just add this line to your Podfile:

pod "NSLogger"

The above only includes C and Obj-C APIs and is suitable for use in applications without any Swift code. Swift syntactic sugar APIs are added with the Swift subspec. If you're developing code in Swift or a mixed Swift / Obj-C environment, use:

pod "NSLogger/Swift"

Note that you don't strictly need to include the /Swift variant for your Swift applications. You can perfectly develop your own extensions that call into NSLogger's C APIs without using the basic provided ones.

Finally if you are using frameworks or libraries that may use NSLogger, then you can use the NoStrip variant which forces the linker to keep all NSLogger functions in the final build, even those that your code doesn't use. Since linked in frameworks may dynamically check for the presence of NSLogger functions, this is required as the linker wouldn't see this use.

pod "NSLogger/NoStrip"

Carthage Install

NSLogger is Carthage-compatible. It builds two frameworks: NSLogger and NSLoggerSwift. You'll need to pick either one (but not both) to use in your application. Both can be used with Swift, the NSLoggerSwift variant adds a simple Swift layer to make NSLogger easier to use from Swift code. You can perfectly develop your own extensions that call into NSLogger's C APIs without using the basic provided ones, and just use the NSLogger framework.

Depending on the framework you choose, your code will need to import NSLogger or import NSLoggerSwift. This is a difference with Cocoapods support where you always import NSLogger.

github "fpillet/NSLogger"

Then run:

$ carthage update

Again, the NSLogger.xcodeproj top-level project offers two targets (NSLogger and NSLoggerSwift). Add the built framework that suits your needs.

Advanced Usage

Using NSLogger on a Shared Network

The first log sent by NSLogger will start the logger, by default on the first Bonjour service encountered. But when multiple NSLogger users share the same network, logger connections can get mixed.

To avoid confusion between users, just add this when you app starts (for example, in the applicationDidFinishLaunching method:

LoggerSetupBonjourForBuildUser();

Then, in the Preferences pane of the NSLogger.app desktop viewer, go to the Network tab. Type your user name (i.e. $USER) in the "Bonjour service name" text field.

This will allow the traces to be received only by the computer of the user who compiled the app.

This only work when NSLogger has been added to your project using CocoaPods.

Set up logger options

For example if you don't want to disable OS_ACTIVITY_MODE for your scheme because you need that logs. And you wanna have only your logs in NSLogger in Swift call init function:

func LoggerInit() {
    let pointer = LoggerGetDefaultLogger()
    var options = LoggerGetOptions(pointer)
    
    options ^= UInt32(kLoggerOption_CaptureSystemConsole) // disable that option
    
    LoggerSetOptions(pointer, options)
}

Manual Framework Install

When using NSLogger without CocoaPods, add LoggerClient.h, LoggerClient.m and LoggerCommon.h (as well as add the CFNetwork.framework and SystemConfiguration.framework frameworks) to your iOS or Mac OS X application, then replace your NSLog() calls with LogMessageCompat() calls. We recommend using a macro, so you can turn off logs when building the distribution version of your application.

How Does the Connection Work?

For automatic discovery of the desktop viewer, your application must run on a device that is on the same network as your Mac. When your app starts logging, the NSLogger framework automatically (by default) looks for the desktop viewer using Bonjour. As soon as traces start coming, a new window will open on your Mac.

Advanced users can setup a Remote Host / Port to log from a client to a specific host), or specify a Bonjour name in case there are multiple viewers on the network.

Advanced Desktop Viewer Features

The desktop viewer application provides tools like:

  • Filters (with regular expression matching) that let your perform data mining in your logs
  • Timing information: each message displays the time elapsed since the previous message in the filtered display, so you can get a sense of time between events in your application.
  • Image and binary data display directly in the log window
  • Markers (when a client is connected, place a marker at the end of a log to clearly see what happens afterwards, for example place a marker before pressing a button in your application)
  • Fast navigation in your logs
  • Display and export all your logs as text
  • Optional display of file, line and function for uncluttered display

Your logs can be saved to a .nsloggerdata file, and reloaded later. When logging to a file, name your log file with extension .rawnsloggerdata so NSLogger can reopen and process it. You can have clients remotely generating raw logger data files, then send them to you so you can investigate post-mortem.

Note that the NSLogger Mac OS X viewer requires Mac OS X 10.6 or later.

Advanced Colors Configuration

Apply colors to tags and messages using regular expressions.

To define the color, you can use:

  • A standard NSColor name, for example: blue
  • Hex colors, for example: #DEAD88
  • You can add the prefix bold, for example: bold red

High Performance, Low Overhead

The NSLogger framework runs in its own thread in your application. It tries hard to consume as few CPU and memory as possible. If the desktop viewer has not been found yet, your traces can be buffered in memory until a connection is acquired. This allows for tracing in difficult situations, for example device wakeup times when the network connection is not up and running.

Credits

NSLogger is Copyright (c) 2010-2018 Florent Pillet, All Rights Reserved, All Wrongs Revenged. Released under the New BSD Licence. The NSLogger icon is Copyright (c) Louis Harboe

Comments
  • Add Carthage support

    Add Carthage support

    This adds carthage support. Some structural changes were needed, as I stated on #182, but none of them actually changes the source code (basically renamed an xcodeproj, and added another)

    opened by heyvito 41
  • No output - Request for help

    No output - Request for help

    This looks great and keen to get it up and running. Although, I'm really struggling to get it to work.

    I have followed the instructions, but feel I may be missing something? Could someone help me debug it?

    I am using Xcode 12.2 on macOS Big Sur

    I have downloaded the Desktop App and I have added the pod to my podfile

    target 'MyApp' do
      capacitor_pods
      # Add your Pods here
      pod "NSLogger"
    end
    

    I have tried Real Devices running iOS 14 and Simulators on 12.4 with no luck.

    I have tried adding the following snippets into the list

        <array>
            <string>_nslogger._tcp</string>
            <string>_nslogger-ssl._tcp</string>
        </array>
        <key>NSLocalNetworkUsageDescription</key>
        <string>Access to the local network for development builds</string>
    

    I have tried adding OS_ACTIVITY_MODE set to disable in Environment Variables for the run schema image

    Could someone point me in the right direction?

    opened by mwyld 17
  • iOS 8: EXC_BAD_ACCESS on LoggerMessageAddString()

    iOS 8: EXC_BAD_ACCESS on LoggerMessageAddString()

    Hi,

    Getting EXC_BAD_ACCESSes at https://github.com/fpillet/NSLogger/blob/master/Client%20Logger/iOS/LoggerClient.m#L2244

    Stacktrace:

    * thread #7: tid = 0x1c70, 0x00000001957d0850 libobjc.A.dylib`objc_msgSend + 16, queue = 'cocoa.lumberjack.NSLogger', stop reason = EXC_BAD_ACCESS (code=1, address=0x13b48beb8)
        frame #0: 0x00000001957d0850 libobjc.A.dylib`objc_msgSend + 16
      * frame #1: 0x00000001004adf34 <REDACTED>`LoggerMessageAddString(encoder=0x0000000178057e50, aString=0x000000017809f180, key=4) + 76 at LoggerClient.m:2230
        frame #2: 0x00000001004af5f8 <REDACTED>`LoggerMessageAddTimestampAndThreadID(encoder=0x0000000178057e50) + 748 at LoggerClient.m:2103
        frame #3: 0x00000001004adbd4 <REDACTED>`LoggerMessageCreate(seq=1) + 208 at LoggerClient.m:2143
        frame #4: 0x00000001004ad870 <REDACTED>`LogMessageTo_internal(logger=0x000000015550d8e0, filename=0x00000001005e961e, lineNumber=92, functionName=0x000000010059705f, domain=0x000000017803f060, level=2, format=0x0000000100748ef8, args=0x000000010380fcd0) + 96 at LoggerClient.m:2499
        frame #5: 0x00000001004adacc <REDACTED>`LogMessageF(filename=0x00000001005e961e, lineNumber=92, functionName=0x000000010059705f, domain=0x000000017803f060, level=2, format=0x0000000100748ef8) + 84 at LoggerClient.m:2724
        frame #6: 0x00000001004acb70 <REDACTED>`-[DDNSLoggerLogger logMessage:](self=0x000000017003bfa0, _cmd=0x000000019575cd2d, logMessage=0x00000001700b5240) + 464 at DDNSLoggerLogger.m:89
        frame #7: 0x0000000100359490 <REDACTED>`__16+[DDLog lt_log:]_block_invoke(.block_descriptor=<unavailable>) + 88 at DDLog.m:695
        frame #8: 0x0000000100b88f3c libdispatch.dylib`_dispatch_call_block_and_release + 24
        frame #9: 0x0000000100b88efc libdispatch.dylib`_dispatch_client_callout + 16
        frame #10: 0x0000000100b91b80 libdispatch.dylib`_dispatch_queue_drain + 1160
        frame #11: 0x0000000100b8ba04 libdispatch.dylib`_dispatch_queue_invoke + 68
        frame #12: 0x0000000100b92d1c libdispatch.dylib`_dispatch_root_queue_drain + 268
        frame #13: 0x0000000100b93cb4 libdispatch.dylib`_dispatch_worker_thread3 + 88
        frame #14: 0x0000000195fed790 libsystem_pthread.dylib`_pthread_wqthread + 732
    

    Looks like the cause is some method signature change earlier in the program flow to me

    opened by itsthejb 16
  • Crash in client code

    Crash in client code

    I quite often get the following crash in LoggerMessageGetSeq(CFDataRef message) at the line: while (partCount--) { uint8_t partKey = *p++; // <-- this line uint8_t partType = *p++;

    partCount is usually something odd (overflow?), like 61359.

    It seems to be happening more when I log images. Not sure how to go about debugging this

    opened by gshaviv 16
  • Swiftier NSLogger

    Swiftier NSLogger

    List of features / changes

    • Added _fast C functions to have a straight logging path when logging from swift

      • no formatting with vaargs
      • not using String -> CString -> UTF8String transforms
      • using NSInteger function in order to use native Swift Ints
      • Provide nullability annotations to have clean swift interfaces
    • Providing a wrapper using swift3+ guidelines:

      • camelCase members instead of UpperCamelCase
      • Everything wrapped in a single class instead of top-level functions
    opened by jeremiegirault 15
  • Mac client layout using tabs

    Mac client layout using tabs

    I am often restarting my apps and this will always result in a new window popping up and I have to close the old one by also deciding not to save the content (which is my default). Sometimes I have the app running on simulator and the device and want to compare the logs.

    So because of this scenario I have the following suggestions:

    • The Mac client should be a single window app, where each log will appear in a new tab
    • Setting to deactivate the dialog asking to save the content if it is not done
    • Option to have the same client appear in the same tab after it starts again instead of opening a new window/tab if the old one is still available
    • Split view (like in Kaleidoscope) of 2 or maybe even more logs. All share the same left sidebar and bottom toolbar
    • In split view align the log entries of all visible logs by a global time stamp column, so it is clear what happens where and when

    Great job so far!!! Andreas

    feature 
    opened by DerAndereAndi 13
  • Capture Console Logs sometimes fails

    Capture Console Logs sometimes fails

    I have enabled kLoggerOption_CaptureSystemConsole and have noticed scenarios where logs that are captured from the console (i.e. they don't display in xcode) ALSO do not show up in the desktop viewer. This usually happens for exceptions early in the app launch cycle (i.e. before the app delegate gets called).

    These logs get lost into oblivion which makes it hard to debug.

    opened by aleemstreak 12
  • Desktop Viewer: status bar obstructed, not all content viewable

    Desktop Viewer: status bar obstructed, not all content viewable

    I have come across an issue with both 1.5 and 1.6 versions of the viewer.

    The status bar disappears, and it is not possible to scroll down enough to see the whole content of the messages pane.

    I attach an screenshot where I have logged a square image (the second one is a square crop). It is not possible to scroll further down.

    nslogger-1 6-missing-statusbar

    bug P3 
    opened by nkanellopoulos 11
  • 10.6 support?

    10.6 support?

    Is the desktop viewer still compatible with 10.6? I can't seem to compile it on there in any case. I get compiler errors on line 295 of LoggerPrefsWindowController.m and NSRegularExpression apparently doesn't exist on 10.6 - which makes me wonder how one can build the app to run under that OS version!

    opened by RJVB 11
  • _pthread_mutex_lock_wait

    _pthread_mutex_lock_wait

    Hi,

    Here's my setup

    LoggerGetDefaultLogger();
    LoggerSetBufferFile(logger, (__bridge CFStringRef)(LogPathForCurrentSession()));
    LoggerSetOptions(logger, kLoggerOption_LogToConsole | kLoggerOption_BufferLogsUntilConnection | kLoggerOption_BrowseBonjour);
    LoggerSetupBonjour(logger, nil, (__bridge CFStringRef)(@"MyProductName"));
    LoggerStart(logger);
    

    Before, when NSLogger was 1.7, if I included the option kLoggerOption_CaptureSystemConsole, the app would freeze occasionally (the same call stack _pthread_mutex_lock_wait). So I removed that option, and NSLogger worked well in all my Staging/Production versions.

    Now with the version 1.8.1, when I call LogMessageF(), app freezes immediately every time.

    screen shot 2017-04-17 at 02 30 36

    Any idea? Did I miss anything?

    Thanks in advance!

    BTW, Happy Easter!

    opened by CocoaBob 10
  • Console logging

    Console logging

    Messages written to stdout and stderr are redirected to NSLogger instances that have been configured with the option kLoggerOption_ConsoleLog. All instances with that option will receive a copy of the messages, on the "console" domain.

    In addition to being convenient while debugging, I found this useful when debugging a remote device - a log-enabled build with console grabbing active will create a log file with all relevant information, including error messages from system libraries.

    Known issues / to do

    • Stopping all NSLogger instances does not revert the output to stdout and stderr original destinations. Messages are still being watched, and dropped.
    • Strings longer than 1000 characters are split into several NSLogger messages.
    opened by pcuenca 10
  • Enabling remote logging on demand in release

    Enabling remote logging on demand in release

    Hi! I just discovered this great pod, and I managed to make it working with success in Debug configuration. I've found that macros like LoggerApp LoggerError etc. are defined within the preprocessor macro DEBUG, so they are available only for debug builds. I would like them to be available also on release builds, only when the user activate remote logging.

    What would be the best practice to achieve this behaviour? What I would do:

    • set a boolean on the NSUserDefaults when user switch the remote logging (and configure the logger for remote connection)

    • on a my own header file, define new macros to check the boolean everytime before calling LogMessageF, for example:

    #define MyLoggerError(level, ...) \ if ([[NSUserDefaults standardUserDefaults] boolForKey:@"remotelogging"]) LogMessageF(__FILE__, __LINE__, __FUNCTION__, @"Error", level, __VA_ARGS__)

    I wonder if this check would slow down performance even if the boolean is set to NO. Using the DEBUG preprocessor LoggerError is replaced with while(0) {} and I don't think it costs any time in runtime.

    Thank you very much!

    opened by Donnit 0
  • [CRASH] crash when opening .nsloggerrawdata in Desktop Viewer

    [CRASH] crash when opening .nsloggerrawdata in Desktop Viewer

    macOS: Big Sur 11.1 Desktop Viewer: 1.9.7

    Client nslogger: installed by cocoapods and version is 1.9.7

    How to reproduce:

    1. open an nsloggerrawdata file recorded in my iOS app
    2. open the file in Desktop Viewer
    3. 💣

    Reproducing Rate: 100%

    I also tried to build the Desktop Viewer myself from the master branch and crash is occurring.

    And after the following change, no crash any more.

    in LoggerDocument.m
    - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
    
    LINE 312
    -			NSData *subset = [NSData dataWithBytesNoCopy:(unsigned char *)p + 4 length:length];
    +			NSData *subset = [NSData dataWithBytes:(unsigned char *)p + 4 length:length];
    

    I checked the code, p is from the input param, and dataWithBytesNoCopy will hand the ownership from to subset. This could cause the input param data to be deallocated twice.

    Please check my analysis, thank you.

    Sorry I don't have much time to make a PR.

    opened by quzongyao 3
  • Please bump version to support SPM

    Please bump version to support SPM

    The latest version 1.9.7 doesn't contain Package.swift to support SPM, but master branch does.

    Please tag a new version (1.9.8?) to the latest stable commit.

    opened by xareelee 0
  • Importing with SPM fails with Xcode 12

    Importing with SPM fails with Xcode 12

    After updating Xcode to the version 12, I can't import NSLogger anymore with SPM. The build fails with:

    The package product 'NSLogger' cannot be used as a dependency of this target because it uses unsafe build flags.

    I'm using the latest master version.

    opened by mickael-menu 8
  • [Improvement] Data-Viewer plugins

    [Improvement] Data-Viewer plugins

    I wonder whether a plugin-architecture for Data viewers would be feasible – or if we could just enhance the data viewer to feature structured data formats – such as SOAP and JSON requests sent/received via HTTP.

    Imagine we could see the received payload and expand/collapse the individual data nodes.

    opened by mickeyl 0
Releases(v1.9.7)
  • v1.9.7(Jan 9, 2019)

  • v1.9.6(Dec 29, 2018)

  • v1.9.5(Dec 26, 2018)

    Desktop Viewer

    • Added support for Dark Mode and accent colors (@stuffmc)
    • Removed outdated BWToolkit dependency (@stuffmc)
    • Updated internal implementations (yay ARC and modern Obj-C)

    Client Logger

    • Updated Swift wrapper for Swift 4.2
    • Fixed OSAtomics deprecations (@jllubia)
    • Multiple fixes for compilation warnings

    Known issues

    • When logging from a macOS app running on macOS 10.14, an initial "crash log" (simulated) is output by the lower networking layers of macOS. This is a known issue in macOS itself but does not prevent NSLogger from working fine.
    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-v1.9.5.zip(1.20 MB)
  • v1.9.0(Mar 11, 2018)

    Desktop Viewer

    • Added support for filtering over multiple tags at once: option-click tag name in the menu (@c0diq)
    • Fix incorrect decoding of log level if transmitted as Int64 (@c0diq)

    Client Logger

    • Modernized logging functions for Swift usage (@jeremiegirault)
    • Multiple fixes for compilation warnings
    • Fixed misaligned address access
    • Fixed runloop timing issue that made flushing after each log too slow

    Dependency manager support

    • Split package identifiers for better Carthage compatibility. Carthage users now get to choose between NSLogger and NSLoggerSwift (same but comes with an additional Swift helper) but not both.
    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-v1.9.0.zip(1.31 MB)
  • v1.8.3(May 9, 2017)

    Client Logger

    • You must now use NSLogger/Swift to get the Swift wrapper along with base NSLogger code. Default pod now just provides C / Obj-C API.
    • Carthage build now has a NSLoggerSwift target
    • Carthage build targets simplified, single target for all platforms
    • Internal debug flag has been inadvertently left turned ON in previous release, resulting in additional logs sent to console
    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-v1.8.3.zip(1.31 MB)
  • v1.8.2(Apr 19, 2017)

  • v1.8.1(Apr 13, 2017)

  • v1.8.0(Apr 9, 2017)

    Desktop Viewer

    • Fixed several crashers
    • Fixed issues with connecting over SSL
    • Fixed UI issues with multiple windows (down-right popup disappearing)

    Client Logger

    • Fixed SSL / TLS connection issues to the desktop
    • Fixed Bonjour connection issues
    • Fixed issues with console logging
    • Reverted to old way of capturing console logs, allowing again both logging to NSLogger Viewer and to Xcode console when running app from Xcode
    • Added Swift wrapper for all platforms (iOS, tvOS, macOS)
    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-v1.8.0.zip(1.31 MB)
  • v1.7.0(May 24, 2016)

    Most changes in this release brought to you by Cédric Luthi (@0xced)

    Desktop Viewer

    • Fixed an issue with status bar disappearing from the desktop viewer window • Implement Xcode file opening with the KZLinkedConsole plugin • Restored per-level color support • Support Copy action

    Client Logger

    • Added support for peer-to-peer networking and desktop viewer discovery • Code moves back from ARC to MRC for readability • Do not check for Reachability in cases where network is not needed (local console logging)

    Download the prebuilt, signed desktop viewer application directly if you don't want to have to build the Mac viewer yourself.

    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-v1.7.0.zip(1.38 MB)
  • v1.6.0(Dec 2, 2015)

    • Fixed a number of issues in the desktop viewer that were causing crashes on OS X 10.11
    • Rewrote stdout/stderr capture code in the client logger to fix some issues (mainly split lines in the output)

    Download the prebuilt, signed desktop viewer application directly if you don't want to have to build the Mac viewer yourself.

    Source code(tar.gz)
    Source code(zip)
    NSLogger-Desktop.Viewer-1.6.0.zip(1.35 MB)
  • v1.5(Sep 9, 2014)

Owner
Florent Pillet
Freelance software developer writing code for mobile (iOS, Android), server (macOS / Linux, Swift with Vapor and Kotlin with Vert.X), and a host of other things
Florent Pillet
Twitter Logging Service is a robust and performant logging framework for iOS clients

Twitter Logging Service Background Twitter created a framework for logging in order to fulfill the following requirements: fast (no blocking the main

Twitter 290 Nov 15, 2022
A logging backend for swift-log that sends logging messages to Logstash (eg. the ELK stack)

LoggingELK LoggingELK is a logging backend library for Apple's swift-log The LoggingELK library provides a logging backend for Apple's apple/swift-log

null 17 Nov 15, 2022
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.

Please star this github repository to stay up to date. TraceLog Introduction TraceLog is a highly configurable, flexible, portable, and simple to use

Tony Stone 52 Oct 28, 2022
A flexible logging library written in Swift

Puppy Puppy is a flexible logging library written in Swift ?? It supports multiple transports(console, file, syslog, and oslog) as loggers. It not onl

Koichi Yokota 92 Dec 29, 2022
Simple, lightweight and flexible debug logging framework written in Swift

AELog Simple, lightweight and flexible debug logging minion written in Swift If you find yourself in upcoming statements, then you probably want to us

Marko Tadić 28 Jul 6, 2022
A fast & simple, yet powerful & flexible logging framework for Mac and iOS

CocoaLumberjack CocoaLumberjack is a fast & simple, yet powerful & flexible logging framework for macOS, iOS, tvOS and watchOS. How to get started Fir

null 12.9k Jan 9, 2023
Spy is a flexible, lightweight, multiplatform logging utility written in pure Swift.

Spy is a flexible, lightweight, multiplatform logging utility written in pure Swift. It allows to log with different levels and on different channels. You can define what levels and channels actually are.

AppUnite Sp. z o.o. Spk. 12 Jul 28, 2021
In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

The debugger tool for iOS developer. Display logs, network request, device informations, crash logs while using the app. Easy accessible with its bubble head button ?? . Easy to integrate in any apps, to handle development or testing apps easier. First version, there is plenty of room for improvement.

Remi ROBERT 1.8k Dec 29, 2022
Simple logging for simples needs.

Simple logging for simples needs.

native.dev.br 0 May 30, 2022
Convenient & secure logging during development & release in Swift 3, 4 & 5

Colorful, flexible, lightweight logging for Swift 3, Swift 4 & Swift 5. Great for development & release with support for Console, File & cloud platfor

SwiftyBeaver 5.6k Jan 4, 2023
Class for logging excessive blocking on the main thread

Watchdog Class for logging excessive blocking on the main thread. It watches the main thread and checks if it doesn’t get blocked for more than define

Wojtek Lukaszuk 1.8k Dec 6, 2022
CleanroomLogger provides an extensible Swift-based logging API that is simple, lightweight and performant

CleanroomLogger CleanroomLogger provides an extensible Swift-based logging API that is simple, lightweight and performant. The API provided by Cleanro

null 1.3k Dec 8, 2022
Willow is a powerful, yet lightweight logging library written in Swift.

Willow Willow is a powerful, yet lightweight logging library written in Swift. Features Requirements Migration Guides Communication Installation Cocoa

Nike Inc. 1.3k Nov 16, 2022
Swift Logging Utility for Xcode & Google Docs

QorumLogs Swift Logging Utility in Xcode & Google Docs

Goktug Yilmaz 777 Jul 15, 2022
A lightweight logging framework for Swift

HeliumLogger Provides a lightweight logging implementation for Swift which logs to standard output. Features Logs output to stdout by default. You can

Kitura 174 Nov 30, 2022
A lightweight logging framework for Swift

HeliumLogger Provides a lightweight logging implementation for Swift which logs to standard output. Features Logs output to stdout by default. You can

Kitura 174 Nov 30, 2022
An extensible logging framework for Swift

Log is a powerful logging framework that provides built-in themes and formatters, and a nice API to define your owns. Get the most out of Log by insta

Damien 825 Nov 6, 2022
Logging utility for Swift and Objective C

Swell - Swift Logging A logging utility for Swift and Objective C. ##Features Turn on logging during development, turn them off when building for the

Hubert Rabago 361 Jun 29, 2022
A powerful input-agnostic swift logging framework made to speed up development with maximum readability.

The Swift logging framework. Atlantis is an extremely powerful logging framework that I've created for everyday use, including enterprise development

Andrew Aquino 199 Jan 2, 2023