A fast & simple, yet powerful & flexible logging framework for Mac and iOS

Overview

CocoaLumberjack

Unit Tests Pod Version Carthage compatible Pod Platform Pod License codecov codebeat badge

CocoaLumberjack is a fast & simple, yet powerful & flexible logging framework for macOS, iOS, tvOS and watchOS.

How to get started

First, install CocoaLumberjack via CocoaPods, Carthage, Swift Package Manager or manually. Then use DDOSLogger for iOS 10 and later, or DDTTYLogger and DDASLLogger for earlier versions to begin logging messages.

CocoaPods

platform :ios, '9.0'

target 'SampleTarget' do
  use_frameworks!
  pod 'CocoaLumberjack/Swift'
end

Note: Swift is a subspec which will include all the Obj-C code plus the Swift one, so this is sufficient. For more details about how to use Swift with Lumberjack, see this conversation.

For Objective-C use the following:

platform :ios, '9.0'

target 'SampleTarget' do
    pod 'CocoaLumberjack'
end

Carthage

Carthage is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.

To install with Carthage, follow the instruction on Carthage

Cartfile

github "CocoaLumberjack/CocoaLumberjack"

Swift Package Manager

As of CocoaLumberjack 3.6.0, you can use the Swift Package Manager as integration method. If you want to use the Swift Package Manager as integration method, either use Xcode to add the package dependency or add the following dependency to your Package.swift:

.package(url: "https://github.com/CocoaLumberjack/CocoaLumberjack.git", from: "3.7.0"),

Note that you may need to add both products, CocoaLumberjack and CocoaLumberjackSwift to your target since SPM sometimes fails to detect that CocoaLumerjackSwift depends on CocoaLumberjack.

Install manually

If you want to install CocoaLumberjack manually, read the manual installation guide for more information.

Swift Usage

Usually, you can simply import CocoaLumberjackSwift. If you installed CocoaLumberjack using CocoaPods, you need to use import CocoaLumberjack instead.

DDLog.add(DDOSLogger.sharedInstance) // Uses os_log

let fileLogger: DDFileLogger = DDFileLogger() // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)

...

DDLogVerbose("Verbose")
DDLogDebug("Debug")
DDLogInfo("Info")
DDLogWarn("Warn")
DDLogError("Error")

Obj-C usage

If you're using Lumberjack as a framework, you can @import CocoaLumberjack;. Otherwise, #import <CocoaLumberjack/CocoaLumberjack.h>

[DDLog addLogger:[DDOSLogger sharedInstance]]; // Uses os_log

DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];

...

DDLogVerbose(@"Verbose");
DDLogDebug(@"Debug");
DDLogInfo(@"Info");
DDLogWarn(@"Warn");
DDLogError(@"Error");

Objective-C ARC Semantic Issue

When integrating Lumberjack into an existing Objective-C it is possible to run into Multiple methods named 'tag' found with mismatched result, parameter type or attributes build error.

Add #define DD_LEGACY_MESSAGE_TAG 0 before importing CocoaLumberjack or add #define DD_LEGACY_MESSAGE_TAG 0 or add -DDD_LEGACY_MESSAGE_TAG=0 to Other C Flags/OTHER_CFLAGS in your Xcode project.

swift-log backend

CocoaLumberjack also ships with a backend implementation for swift-log. Simply add CocoaLumberjack as dependency to your SPM target (see above) and also add the CocoaLumberjackSwiftLogBackend product as dependency to your target.

You can then use DDLogHandler as backend for swift-log, which will forward all messages to CocoaLumberjack's DDLog. You will still configure the loggers and log formatters you want via DDLog, but writing log messages will be done using Logger from swift-log.

In your own log formatters, you can make use of the swiftLogInfo property on DDLogMessage to retrieve the details of a message that is logged via swift-log.

More information

  • read the Getting started guide, check out the FAQ section or the other docs
  • if you find issues or want to suggest improvements, create an issue or a pull request
  • for all kinds of questions involving CocoaLumberjack, use the Google group or StackOverflow (use #lumberjack).

CocoaLumberjack 3

Migrating to 3.x

  • To be determined

Features

Lumberjack is Fast & Simple, yet Powerful & Flexible.

It is similar in concept to other popular logging frameworks such as log4j, yet is designed specifically for Objective-C, and takes advantage of features such as multi-threading, grand central dispatch (if available), lockless atomic operations, and the dynamic nature of the Objective-C runtime.

Lumberjack is Fast

In most cases it is an order of magnitude faster than NSLog.

Lumberjack is Simple

It takes as little as a single line of code to configure lumberjack when your application launches. Then simply replace your NSLog statements with DDLog statements and that's about it. (And the DDLog macros have the exact same format and syntax as NSLog, so it's super easy.)

Lumberjack is Powerful:

One log statement can be sent to multiple loggers, meaning you can log to a file and the console simultaneously. Want more? Create your own loggers (it's easy) and send your log statements over the network. Or to a database or distributed file system. The sky is the limit.

Lumberjack is Flexible:

Configure your logging however you want. Change log levels per file (perfect for debugging). Change log levels per logger (verbose console, but concise log file). Change log levels per xcode configuration (verbose debug, but concise release). Have your log statements compiled out of the release build. Customize the number of log levels for your application. Add your own fine-grained logging. Dynamically change log levels during runtime. Choose how & when you want your log files to be rolled. Upload your log files to a central server. Compress archived log files to save disk space...

This framework is for you if:

  • You're looking for a way to track down that impossible-to-reproduce bug that keeps popping up in the field.
  • You're frustrated with the super short console log on the iPhone.
  • You're looking to take your application to the next level in terms of support and stability.
  • You're looking for an enterprise level logging solution for your application (Mac or iPhone).

Documentation

Requirements

The current version of Lumberjack requires:

  • Xcode 12 or later
  • Swift 5.3 or later
  • iOS 9 or later
  • macOS 10.10 or later
  • watchOS 3 or later
  • tvOS 9 or later

Backwards compatibility

  • for Xcode 11 and Swift up to 5.2, use the 3.6.2 version
  • for Xcode 10 and Swift 4.2, use the 3.5.2 version
  • for iOS 8, use the 3.6.1 version
  • for iOS 6, iOS 7, OS X 10.8, OS X 10.9 and Xcode 9, use the 3.4.2 version
  • for iOS 5 and OS X 10.7, use the 3.3 version
  • for Xcode 8 and Swift 3, use the 3.2 version
  • for Xcode 7.3 and Swift 2.3, use the 2.4.0 version
  • for Xcode 7.3 and Swift 2.2, use the 2.3.0 version
  • for Xcode 7.2 and 7.1, use the 2.2.0 version
  • for Xcode 7.0 or earlier, use the 2.1.0 version
  • for Xcode 6 or earlier, use the 2.0.x version
  • for OS X < 10.7 support, use the 1.6.0 version

Communication

  • If you need help, use Stack Overflow. (Tag 'lumberjack')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Data Collection Practices

Per App privacy details on the App Store, Apple is requesting app developers to provide info about their data collection, us SDK maintainers must provide them with the same data.

Data collection by the framework

By default, CocoaLumberjack does NOT collect any data on its own.

See our Data Collection Practices list.

Indirect data collection through the framework

CocoaLumberjack is a logging framework which makes it easy to send those logs to different platforms.

This is why collecting data might happen quite easily, if app developers include any sensitive data into their log messages.

Important note: app developers are fully responsible for any sensitive data collected through our logging system!

In consequence, you must comply to the Apple's privacy details policy (mentioned above) and document the ways in which user data is being collected. Since the number of scenarios where data might be indirectly collected through CocoaLumberjack is quite large, it's up to you, as app developers, to properly review your app's code and identify those cases. What we can do to help is raise awareness about potential data collection through our framework.

Private data includes but isn't limited to:

  • user info (name, email, address, ...)
  • location info
  • contacts
  • identifiers (user id, device id, ...)
  • app usage data
  • performance data
  • health and fitness info
  • financial info
  • sensitive info
  • user content
  • history (browsing, search, ...)
  • purchases
  • diagnostics
  • ...

Example: DDLogInfo("User: \(myUser)") will add the myUser info to the logs, so if those are forwarded to a 3rd party or sent via email, that may qualify as data collection.

Author

  • Robbie Hanson
  • Love the project? Wanna buy me a coffee? (or a beer :D) donation

Collaborators

License

  • CocoaLumberjack is available under the BSD 3 license. See the LICENSE file.

Extensions

Architecture

Comments
  • Swift package support.

    Swift package support.

    New Pull Request Checklist

    • [x] I have read and understood the CONTRIBUTING guide

    • [x] I have read the Documentation

    • [x] I have searched for a similar pull request in the project and found none

    • [x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

    • [x] I have added the required tests to prove the fix/feature I am adding

    • [x] I have updated the documentation (if necessary)

    • [x] I have run the tests and they pass

    • [x] I have run the lint and it passes (pod lib lint)

    Pull Request Description

    Integration

    • [x] Add Package.swift
    • [x] Move headers to Include folder.
    • [x] Add helper target for tests target ( Tests/Library ).
    • [x] Add Tests targets to package.
    • [x] Fix Xcode project.
    • [x] Fix CocoaPods.
    • [x] Fix tests targets.

    Cleanup

    • [ ] Cleanup DDLog (?)
    opened by lolgear 95
  • How to use cocoalumberjack with Swift

    How to use cocoalumberjack with Swift

    Hi. I've been reading here and there, and I am unsure how to use the framework with swift.

    I've seen people aking their own wrappers in swift, but that was quite some months ago.

    Following the issues in there, my understanding is that there's an official swift wrapper for using cocoalumberjack.

    Having retrieved the lib with cocoapods , the beta 4 from 2.0.0, I still don't see any swift class there, and none of the example projects uses a swift also.

    So I'm kinda confused how to make that work with the "official" means.

    Any light that you can shed on this ?

    Thx

    Started Discussion 
    opened by GuyFran 59
  • Revive CocoaLumberjack

    Revive CocoaLumberjack

    List of things to do

    • [x] admin permissions from Robbie to @rivera-ernesto @bpoplauschi
    • [x] set GitHub topics for the projects - help discoverability
    • [ ] 1.A - Add new collaborators:
      • [x] @sushichop
      • [ ] @jcbertin
      • [x] @nrbrook
      • [x] @diederich
      • [x] @ksuther
      • [ ] @nekrich
      • [ ] @acacio88
      • ~~@ole - declined~~
      • [x] @hhanesand
      • [x] @ffried
      • ~~@Coeur - declined~~
      • [ ] @an0
      • [ ] @0xced
      • [ ] @DD-P
      • [ ] @MelnykTaras
      • ~~@pombredanne - declined~~
      • [x] @lolgear
    • [ ] 1.B - Automated generation of list of contributors (per release)
    • [x] 1.C - Create BetaTesters team @CocoaLumberjack/betatesters
    • [x] 1.D - Create and publish website: https://cocoalumberjack.github.io/
    • [x] 2 - triage the open issues - from ~~114~~ to 28 - thanks to the new team members and the Stale bot :)
    • [ ] 3 + 4 - Update CONTRIBUTING.md
    • 5 - Automate tasks
      • [x] install Stale bot to check/close old issues
      • [ ] install behaviorbot request-info to check each issue has the required info
      • [ ] release pipeline with https://github.com/semantic-release/semantic-release - to be investigated
      • [x] configure Danger for coding style checks on each PR #962 #956
      • [ ] generation of CHANGELOG with github-changelog-generator
    • [ ] 6 - Need a decision for periodic releases

    @CocoaLumberjack/collaborators

    Current status of CocoaLumberjack

    For a while, the people mentioned here and myself, we managed to keep this project running, releasing versions, responding to issues, fixing, ... I think it's very clear we have reached a point where the project looks abandoned (well, not entirely, but issues are pilling up, we are not as proactive in adopting new releases of Xcode, Swift, ...). I want to change that ...

    Old approach

    At least for myself, but for the rest of you as well, I think we just freed up time based on availability and just worked the way we thought was best, in bursts. No big plan, no roadmap, adding very few contributions. And then became distracted by something else in our lives, issues and pull requests pilled up here, then we had to free up another chunk of time and so on. I don't think I can keep doing it this way.

    Open Source Guide

    At some point, I came across the Open Source Guide, a collection of guides for open source projects and I just think that information gathered there is super valuable, since it comes from people that had different roles in open source projects. I would like us to implement some of the ideas there.

    Proposals

    I have an initial list of proposals, but I do want you guys to contribute or at least tell me what you think

    1 - Building a community

    I think this is the most important item here, because we do need all the help we can get, but also we want people to interact more, share their ideas. Also, there might be people who are willing to contribute, but are not sure about how or if they could add value.

    1.A - More maintainers

    Open Source Guide - Growing your community mentions a strategy called The Pull Request Hack. Feel free to read about it, it basically favours giving commit access to any contributor, if they have a decent GitHub profile, show skill and their contribution is somehow useful. While I agree partially with this article, I think there is a good number of people who show interest in our project and that we can ask to become maintainers.

    Just look at the contributors list from the past year, you will notice people like sushichop nrbrook ole and so on (I'm not using @github_username so I don't notify them ... yet).

    The article does advocate how people become more responsible and more willing to do more when they get write access to a repo.

    1.B - List of contributors

    I think using some tools we can generate a list of contributors, generic one or per release and post it on GitHub. This should encourage people to contribute so they put their name out there. Small incentive.

    1.C - Teams

    Now we have https://github.com/orgs/CocoaLumberjack/teams/collaborators which we can use to notify all the collaborators (using @CocoaLumberjack/collaborators). One idea is to have another team that has no write access, but contains a list of Beta testers, where we can notify people of publishing a beta release or any release at all.

    1.D - Website and Newsletter

    I think publishing a newsletter combined with periodical releases (like once every month) can bring even more engagement to the project. Not sure about the way to implement this, but one idea is to use GitHub Pages and create a website for our project where we can put documentation, tutorials, publish releases, ... Reaching through to the users of our project is something I would push for.

    2 - Code and issues refresh

    We need to triage through the 100+ issues, find and fix the most important ones, update with the latest Xcode and Swift changes, release. We can extend the list of contributors, but we can't build the community until we start (not necesarily after we finish) refreshing the code and issues.

    3 - Long term vision and Contributing guide

    I think we can do a lot better in explaining what contributions we accept, what help we need, what the long term project vision is. All this should be better explained in the README.md and CONTRIBUTING.md files. The existing CONTRIBUTING.md is more defensive, now that I have read it with new eyes, pushing people away rather than getting them closer. We are lacking an explicit long term vision. See the proposals I made for another project where I contribute: https://github.com/rs/SDWebImage/pull/2416/files My idea is to encourage people to contribute, even if it's not code at first. We can mentor the ones just starting up. Every contribution is valuable. See Orta's contribution to CocoaPods, he mainly worked on documentation and tooling. So from adding documentation, tutorials, helping triage the issues, respond to issues, respond to Stack Overflow to small coding contributions to big refactoring, I think they are all beneficial to the project.

    4 - What is the long term vision

    We must accept that this project belongs to a community and sometimes, we might not agree with the direction asked by that community.

    5 - Automate tasks

    I think we can use even more of the existing tools in automating work (we already using Travis for continuous integration or Codecov for code coverage)

    • I've seen some projects using a bot that can, for example, close issues that are not updated for a while (https://github.com/apps/stale)
    • we can automate the release pipeline (i.e. https://github.com/semantic-release/semantic-release)
    • we can use https://github.com/danger/danger to check and make it clear what the coding style should look like. This will run for each PR
    • we can use a tool like https://github.com/github-changelog-generator/github-changelog-generator to generate the CHANGELOG ...

    6 - Periodic releases

    Here I just want us to discuss if you think releasing a new version every (let's say month) sounds beneficial. We would have a clear timeline and make sure the contributions are published without delays.

    7 - Overall tone

    I think we can do a lot better here as well, starting with myself. Making sure people have a great interaction with our team will make them more likely to come back. We should appreciate the time they took to use our project, get back with issues and PRs and we should communicate this. Then make sure we are nice and explain what we expect or why we can't/won't accept their contribution. Statistics also show it's important to respond in a decent amount of time (up to a week, but preferably in a few days).

    8 - Getting things moving

    Keeping the conversation going towards a resolution and action items is something we need to have in mind. We all have dealt with issues or PRs that deviate or remain in a state where we don't know how to move forward, people lose interest and just abandon their contribution. Let's make that effort in making sure we do move. Now when we will go through the list of existing issues, most of their authors will not respond nor remember what the issue was, so we will just close it with no resolution. This is not ideal.

    9 - Encourage even contributions that don't match the vision

    Even if we see contributions that are not a match for the project per se, we can still do something about it. We can tell people to just fork and maintain that fork. We can build some pluginable pieces.

    Example: At SDWebImage, we build plugins for different image formats and created some projects under the same organisation that are dedicated plugins. People can contribute to those dedicated projects or just create their own without us having to modify the core project. Responsibility is shared.

    THIS IS A DRAFT ISSUE - I WILL MODIFY IT AS WE DISCUSS

    Discussion Stale 
    opened by bpoplauschi 57
  • Integration: app targets have been separated from framework.

    Integration: app targets have been separated from framework.

    New Pull Request Checklist

    • [x] I have read and understood the CONTRIBUTING guide

    • [x] I have read the Documentation

    • [x] I have searched for a similar pull request in the project and found none

    • [x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

    • [x] I have added the required tests to prove the fix/feature I am adding

    • [x] I have updated the documentation (if necessary)

    • [x] I have run the tests and they pass

    • [x] I have run the lint and it passes (pod lib lint)

    This merge request fixes / refers to the following issues: ...

    Pull Request Description

    App targets have been separated from framework.

    • [ ] Check watchOS and iOS Swift integration app targets.
    • [x] Remove old integration targets.
    • [x] Update travis configuration file.

    UPD: Unknown behavior in watchOS target.

    ld: URGENT: building for watchOS Simulator simulator, but linking against dylib (~/Library/Developer/Xcode/DerivedData/Integration-cpyxjtzsyeaofnaanurdqqcwsezf/Build/Products/Release-iphonesimulator/CocoaLumberjackSwift.framework/CocoaLumberjackSwift) built for iOS Simulator. Note: This will be an error in the future.
    
    opened by lolgear 49
  • [DISCUSSION] Simplify CocoaLumberjack

    [DISCUSSION] Simplify CocoaLumberjack

    New Issue Checklist

    IMHO, the structure of CocoaLumberjack is becoming complicated. Then, I want to simplify CocoaLumberjack in order to maintain it flexibly and easily for the future.

    2 necessary things to simplify

    1. I want to change minimum os versions to iOS 8.0, macOS 10.10, tvOS 9.0, and watchOS 2.0. These values should be low enough for many developers and, furthermore, these are the same as the minimum versions of most libraries.

    2. I want to limit podspecs to only 2 specs. default(Objective-C) subspec and swift subspec. I think most developers use only these 2 specs. Of course, I'll add the old subspecs(extension and cli subspecs) to the new default and swift subspec.

    What do you think about this? If you agree, I'll be glad to create a PR for it.


    Background

    After finishing the above, I want to introduce universal(multi platform) framework instead of each targeted platform framework.

    • CocoaLumberjack- {iOS, macOS, tvOS, watchOS} (4 frameworks) -> CocoaLumberjack (1 framework)
    • CocoaLumberjackSwift- {iOS, macOS, tvOS, watchOS} (4 frameworks) -> CocoaLumberjackSwift (1 framework)

    I also think the simplicity as above is necessary as a first step to support SwiftPM in the near future.

    Thanks.

    Discussion 
    opened by sushichop 42
  • Include of non-modular header compile error with 2.0.1

    Include of non-modular header compile error with 2.0.1

    After update to 2.0.1 I get this errors in CocoaLumberjack for all highlighted imports. CocoaLumberjack declared s.dependency 'CocoaLumberjack', '~> 2.0' in our SDK pod spec. When it is pulled with pod install into target project with 2.0.1 we start getting those errors.

    What exactly has been changed in CocoaLumberjack structure?

    Bug 
    opened by parfeon 35
  • 2.0.1

    2.0.1

    again breaking backward compatibility?

    Code that was working fine with 2.0.0, does not work at 2.0.1 anymore.

    Error:(74, 3) use of undeclared identifier 'ddLogLevel'
    
    Discussion 
    opened by plandem 33
  • XcodeColors doesn't work

    XcodeColors doesn't work

    I follow the step to configured the xcode but the content in output did't render with color but with messy code.

        //Adds the logger to the console (similar to nslog)
        [DDLog addLogger:[DDTTYLogger sharedInstance]];
        // And we also enable colors
        [[DDTTYLogger sharedInstance] setColorsEnabled:YES];
    
        DDLogWarn(@"waring");
        DDLogError(@"error");
    
    [38;5;130m2012-08-03 22:22:50:735[10875:c07] waring
    2012-08-03 22:22:50:735[10875:c07] error
    
    

    [38;5;130m and  are the messy code.

    I also test with xcodecolor test project and it works fine.

    Thanks.

    Discussion 
    opened by lanvige 30
  • fix missing ios system framwork dependence

    fix missing ios system framwork dependence

    New Pull Request Checklist

    • [x] I have read and understood the CONTRIBUTING guide

    • [x] I have read the Documentation

    • [x] I have searched for a similar pull request in the project and found none

    • [x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

    • [x] I have added the required tests to prove the fix/feature I am adding

    • [x] I have updated the documentation (if necessary)

    • [x] I have run the tests and they pass

    • [x] I have run the lint and it passes (pod lib lint)

    This merge request fixes / refers to the following issues: ...

    Pull Request Description

    While enable use_frameworks in Podfile, errors encountered while link the project cause CocoaLumberjack's podspec has leak of enough system framework dependence.

    the error info:

    Undefined symbols for architecture arm64:
      "_CGContextFillRect", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_CGContextRelease", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_CGColorSpaceRelease", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_OBJC_CLASS_$_UIColor", referenced from:
          objc-class-ref in DDTTYLogger.o
      "_CGContextSetFillColorWithColor", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_CGColorSpaceCreateDeviceRGB", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_CGBitmapContextCreate", referenced from:
          +[DDTTYLogger getRed:green:blue:fromColor:] in DDTTYLogger.o
      "_UIApplicationWillTerminateNotification", referenced from:
          -[DDLog init] in DDLog.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    To fix this, add the missing frameworks dependence to podspec ...

    opened by euanchan 29
  • Use of undeclared identifier 'NSProcessInfo'

    Use of undeclared identifier 'NSProcessInfo'

    New Issue Checklist

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform Name | ios Platform Version | 11.1 CocoaLumberjack Version | 3.3.0 Integration Method | cocoapods Xcode Version | Xcode 9.1 Repro rate | all the time (100%)

    Issue Description and Steps

    Use of undeclared identifier 'NSProcessInfo'

    The simulator is fine, but my Apple phone is problematic.

    opened by RtzX 29
  • Fail to find CocoaLumberjack.h

    Fail to find CocoaLumberjack.h

    When install CocoaLumberjack via cocoapods:

    pod 'CocoaLumberjack', '2.0.0-beta4'

    and then add to my .pch file this line:

    #import <CocoaLumberjack/CocoaLumberjack.h>

    its says that the file can't be found. And its there and even xcode autocomplete the route.

    I don't found any related problem in the closed issues.

    opened by nexon 29
  • Crash -[DDLogMessage .cxx_destruct] (DDLog.m:1037)

    Crash -[DDLogMessage .cxx_destruct] (DDLog.m:1037)

    New Issue Checklist

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform Name | ios Platform Version | 15.1-15.6 CocoaLumberjack Version | 3.5.3 Integration Method | cocoapods Xcode Version | Xcode 13.4.1 Repro rate | sometimes

    Issue Description and Steps

    0 libobjc.A.dylib _objc_release + 16 1 HiStor_release -[DDLogMessage .cxx_destruct] (DDLog.m:1037) 2 libobjc.A.dylib object_cxxDestructFromClass(objc_object*, objc_class*) + 112 4 libobjc.A.dylib __objc_rootDealloc + 52 5 HiStor_release ___destroy_helper_block_e8_32s40s (HSBigPhotoNewRebuildViewController+lookDetail.m:0) 6 libsystem_blocks.dylib __Block_release + 184 7 libdispatch.dylib __dispatch_client_callout + 16 8 libdispatch.dylib __dispatch_lane_serial_drain$VARIANT$armv81 + 600 9 libdispatch.dylib __dispatch_lane_invoke$VARIANT$armv81 + 388 10 libdispatch.dylib __dispatch_workloop_worker_thread + 608 11 libsystem_pthread.dylib __pthread_wqthread + 284

    opened by xgycc 4
  • Migration guide in Readme. Should everyone migrate to OSLog?

    Migration guide in Readme. Should everyone migrate to OSLog?

    New Issue Checklist

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform Name | e.g. ios / osx / tvos / watchos Platform Version | e.g. 8.0 CocoaLumberjack Version | e.g. 2.3.0 Integration Method | e.g. carthage / cocoapods / manually Xcode Version | e.g. Xcode 7.3 Repro rate | e.g. all the time (100%) / sometimes x% / only once Demo project link | e.g. link to a demo project that highlights the issue

    Issue Description and Steps

    This project was very good for many years, it was de-facto a standard framework for logging in iOS (and Apple ecosystem?). But time goes by and, well, we should, at least, add migration guide to Readme. First section should be "Why" this framework exists and "When" you can use it. And only after these questions we can said: If you still want to use this framework, well, that is how you can install it.

    Discussion 
    opened by lolgear 4
  • Log rotate has some problem in 3.7.4 version

    Log rotate has some problem in 3.7.4 version

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform Name | osx Platform Version | all CocoaLumberjack Version | 3.7.4 Integration Method | carthage Xcode Version | Xcode 12.4 Repro rate | all the time (100%)

    Issue Description and Steps

    I have just upgraded CocoaLumberjack from 3.7.2 to 3.7.4, But I found there is some strange problems occur.

    Below is code about how to control log rotate.

        fileLogger.maximumFileSize = 20 * 1024 * 1024;
        fileLogger.rollingFrequency = 0;
    

    image

    Issuer#1:

    I found that the log is rotated when its size is only 1.3M, In 3.7.2, This works as 20M.

    Issuer#2:

    The log file which should be xxx-202112291336.log, but it has been changed to xxx-202212291336.log

    Is this issue related to https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1234???

    opened by oyljerry 10
  • Change `DDLogLevel` from enum to options

    Change `DDLogLevel` from enum to options

    New Pull Request Checklist

    • [x] I have read and understood the CONTRIBUTING guide

    • [x] I have read the Documentation

    • [x] I have searched for a similar pull request in the project and found none

    • [x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

    • [ ] I have added the required tests to prove the fix/feature I am adding

    • [ ] I have updated the documentation (if necessary)

    • [ ] I have run the tests and they pass

    • [ ] I have run the lint and it passes (pod lib lint)

    This merge request fixes / refers to the following issues: n/a

    Pull Request Description

    As discussed in this StackOverflow question, there's not really a clean way to implement custom log levels in Swift.

    As DDLogFlag is defined as NS_OPTIONS, absolutely any value is valid here, but with DDLogLevel defined as an enum, as far as Swift as concerned the existing levels are the only valid levels. I can't even particularly cleanly write aliases for the existing levels.

    Further, to me, it doesn't even make particular sense for DDLogFlag to be NS_OPTIONS while DDLogLevel is NS_ENUM. If anything, shouldn't it almost be the opposite...? Logically, it doesn't make sense that something might be logged as [.error, .info] from Swift, but you could log something using that flag... but what does that even mean? Meanwhile, from Swift, I can not do as some CocoaLumberjack documentation suggests, and easily filter to say "show me .info level, but not .warnings, but do show me .error level". This again comes back to the fact that DDLogLevel is an enum and from the Swift side I can not create any custom values for this.

    By this logic, DDLogFlag itself should arguably be NS_ENUM rather than NS_OPTION, however, I recommend leaving it as NS_OPTION, because changing it to NS_ENUM once again would limit my ability to use custom log levels from Swift.

    Feature Request Discussion 
    opened by nhgrif 3
  • Remove Non-Inclusive Terms

    Remove Non-Inclusive Terms

    Issue Info

    CocoaLumberjack currently has several references to non-inclusive terms.

    Issue Description and Steps

    Can we please get an updated version of the SDK which removes all non-inclusive language? We are focusing on removing such language from our company which extends to all third-party code we choose to use.

    Specifically terms such as whitelist (also here, here, and here), blacklist (also here, and here), master, slave, etc. Would love this to cover actual code of course, but also, comments, branch names, repo descriptions on dependency management central repositories, licensing agreements, etc.

    Discussion Important 
    opened by tinder-owenthomas 13
  • WIP: Enable BUILD_LIBRARY_FOR_DISTRIBUTION for Release configuration

    WIP: Enable BUILD_LIBRARY_FOR_DISTRIBUTION for Release configuration

    New Pull Request Checklist

    • [X] I have read and understood the CONTRIBUTING guide

    • [X] I have read the Documentation

    • [X] I have searched for a similar pull request in the project and found none

    • [X] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

    • [ ] I have added the required tests to prove the fix/feature I am adding

    • [ ] I have updated the documentation (if necessary)

    • [X] I have run the tests and they pass

    • [X] I have run the lint and it passes (pod lib lint)

    Pull Request Description

    Hello there,

    The problem

    Right now, if you will try to reuse CocoaLumberjack built with Swift 5.1 Toolchain with Xcode 11.2 (11.2.1GM) you get an error:

    ./Badoo/Platform/Foundation/source/logging/BPFLog.swift:6:8: 
        Module compiled with Swift 5.1 cannot be imported by the Swift 5.1.2 compiler: 
        ./Badoo/ThirdParty/Carthage/Build/iOS/CocoaLumberjackSwift.framework/Modules/CocoaLumberjackSwift.swiftmodule/x86_64-apple-ios-simulator.swiftmodule
    

    Solution

    Swift 5.1 is here with Module Stability support, and to be able to reuse CocoaLumberjack binaries between Swift Toolchains >= 5.1 we have to build it with BUILD_LIBRARY_FOR_DISTRIBUTION = YES option. In this pull request, the BUILD_LIBRARY_FOR_DISTRIBUTION option is enabled for the Release configuration.

    This is the year when we blame Apple for missing documentation and this is the case. In general, this option does the following:

    Ensures that your libraries are built for distribution. For Swift, this enables support for library evolution and generation of a module interface file.

    If you want to know more, check "Binary Frameworks in Swift" session from WWDC'19.

    We tested the solution, and it works just fine. You can build CocoaLumberjack with Swift 5.1 Toolchain and it will work/link for both Xcode 11.1-11.2 (aka, Swift 5.1 and Swift 5.1.1).

    Cheers, Artem | Badoo

    Feature Request Awaiting response 
    opened by dive 24
Releases(3.8.0)
  • 3.8.0(Nov 2, 2022)

    3.8.0 - Xcode 14.1 on Nov 2nd, 2022

    Public

    • Add support for Xcode 14 / Swift 5.7 - drop support for Swift < 5.5, iOS/tvOS < 11, macOS < 10.13, watchOS < 4 (#1316)
    • Update README about swift-log usage (#1275)
    • Use dispatch_walltime for scheduling log file rolling timer (#1309)

    Internal

    • Add consistent newline to file endings (#1272)
    • Fix error checking in DDFileLogger (#1274)
    • Avoid using NSString format (#1280)
    • Prevent logging to symlink files (#1314)

    All changes

    • Add consistent newline to file endings by @fdenzer in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1272
    • Fix for "DDFileLogger: Failed to synchronize file: nil" by @fujisoft in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1274
    • Bump maxim-lobanov/setup-xcode from 1.4.0 to 1.4.1 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1277
    • ADD: update readme about swift-log usage by @veraposeidon in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1275
    • Optimization date formatter cost by @kinarobin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1279
    • Avoid using NSString format by @kinarobin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1280
    • Revert "Merge pull request #1279 from kinarobin/optimization-date-for… by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1282
    • Update CHANGELOG by @sushichop in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1281
    • DDTTYLogger optimisations. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1286
    • Revert pr 1274 by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1283
    • Fixed -isEqual: and -hash methods for DDLogMessage class. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1285
    • Fixed nullability conflict or file parameter for DDLogMessage creation. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1284
    • Bump actions/github-script from 5 to 6 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1290
    • Fix nullability violations by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1287
    • Bump Tests project to Xcode 13.2. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1288
    • Added comment to PR #1287. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1292
    • Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1293
    • Bump codecov/codecov-action from 2.1.0 to 3 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1295
    • Add Swift 5.6 support, add Sendable conformances to ObjC classes by @ffried in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1299
    • Update copyright to 2022 by @ffried in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1300
    • Bump sersoft-gmbh/xcodebuild-action from 1 to 2 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1301
    • Bump sersoft-gmbh/swift-coverage-action from 2 to 3 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1302
    • Add Bugfender logger by @jgimenez in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1305
    • Updated to Xcode 13.4. by @jcbertin in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1308
    • Use dispatch_walltime for scheduling log file rolling timer by @ffried in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1309
    • Don't log into symlink files by @smaryus in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1314
    • Fix code-level build warnings by @tiwoc in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1317
    • Bump maxim-lobanov/setup-xcode from 1.4.1 to 1.5.0 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1318
    • Bump maxim-lobanov/setup-xcode from 1.5.0 to 1.5.1 by @dependabot in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1319
    • Update to Xcode 14 / Swift 5.7 by @ffried in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1316

    New Contributors

    • @fdenzer made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1272
    • @fujisoft made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1274
    • @veraposeidon made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1275
    • @jgimenez made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1305
    • @smaryus made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1314
    • @tiwoc made their first contribution in https://github.com/CocoaLumberjack/CocoaLumberjack/pull/1317

    Full Changelog: https://github.com/CocoaLumberjack/CocoaLumberjack/compare/3.7.4...3.8.0

    Source code(tar.gz)
    Source code(zip)
  • 3.7.4(Dec 16, 2021)

  • 3.7.3(Dec 16, 2021)

    Public

    • Fix "DDFileLogger: Failed to get offset" when setting maximumFileSize (#1234)
    • Follow-up to add annotations to DDOSLogger (#1248)
    • Fixed nullability conflict in DDDispatchQueueLogFormatter.h (#1252)
    • Add Swift 5.5 support, fix archive build on Xcode 13 (#1253)
    • Fix file access issue in Catalyst apps (#1257)
    • Fix excluded archs in debug build when not mac catalyst (#1260)
    • Bump Xcode last upgraded version to 13.2 (#1265)
    • Don't log warnings for CLI apps in DDTTYLogger (#1269)
    Source code(tar.gz)
    Source code(zip)
  • 3.7.2(Apr 9, 2021)

  • 3.7.1(Apr 7, 2021)

    Public

    • Deprecate tag property of DDLogMessage, use representedObject instead. (#1177, #532)
    • Add per-message synchronous logging control for messages logged via SwiftLog using DDLogHandler (#1209)
    • Add TargetConditionals import for Xcode 12.5 (#1210)
    • Prevent logging an error when archiving an already deleted file (#1212)
    • Use inclusive words - denylist / allowlist (#1218)
    • Add DDAssertionFailure macro for Objective-C (#1220)

    Internal

    • Use setter to replace kvo for NSFileLogger (#1180)
    • Use new API for NSFileHandle on supported platforms (#1181)
    • Remove unnecessary checks in DDFileLogger (#1182)
    • Add an assertion to avoid potential deadlock issues for flushLog (#1183)
    Source code(tar.gz)
    Source code(zip)
  • 3.7.0(Oct 1, 2020)

    Public

    • Breaking change: Dropped support for iOS 8 (#1153)
    • Update SPM tools-version to 5.3 to enable Swift 5.3 support (#1148)
    • Add backend for swift-log (#1164)
    • Specify CocoaPods version to ensure swift_version attribute works (#1167)
    • Simplify DDLogFileManager callbacks for archived log files (#1166)
    Source code(tar.gz)
    Source code(zip)
  • 3.6.2(Jul 31, 2020)

    Public

    • Fix warnings when building with SPM bundled with Swift 5.2 / Xcode 11.4 (#1132)
    • Added Swift name for DDQualityOfServiceName constants.
    • Don't localize timestamps in DDefaultFileLogFormatter (#1151)
    • Allow logging arbitrary objects via Swift log functions (#1146)

    Repository

    • Switch from Travis to GitHub Actions (#1135, #1140, #1150, #1152)
    Source code(tar.gz)
    Source code(zip)
  • 3.6.1(Feb 3, 2020)

    Public

    • Improve error handling during log file creation in DDFileLogger & DDLogFileManager (#1103 / #1111)
    • Improve nullability annotations in public headers (#1111 / #1112 / #1119)
    • Added support for thread QOS in DDLogMessage class (#1124)

    Internal

    • Fix rolling timer being rescheduled rapidly due to leeway (#1106 / #1107)
    • Fix -didArchiveLogFile: returning the file name instead of the file path (#1078)
    • Fix setxattr() function usage (#1118)
    • Fix NSDateFormatter thread safety (#1121)
    • Fix -lt_dataForMessage: duplicated code (#1122)
    Source code(tar.gz)
    Source code(zip)
  • 3.6.0(Oct 1, 2019)

    Public

    • Swift Package Manager Support (#1083)
    • New willLogMessage: and didLogMessage: methods on DDFileLogger which provide access to the current log file info (#1076)

    Internal

    • Fix issue with log archiving in the simulator (#1098)
    • Limit assertion to non-simulator build (#1100)
    Source code(tar.gz)
    Source code(zip)
  • 3.5.3(Apr 24, 2019)

    Public

    • Additional compatibility with Swift 5 (backwards compatible with Swift 4) (#1043)
    • Fix warning building with Xcode 10.2 (#1059)
    • Set Xcode 10.2 and Swift 5.0 as a default (#1064)
    • Fix format string crash (#1066)

    Internal

    • Fix warning about syntax (#1054) (#1065)
    • Remove banned APIs (#1056) (#1057)
    • Add CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER & fix warnings (#1059)
    • Use LLONG_MAX instead of LONG_LONG_MAX (#1062)
    Source code(tar.gz)
    Source code(zip)
  • 3.5.2(Mar 15, 2019)

    Public

    • Fix reusing of log files after rolling (#1042)
    • Fix creation of too many log files (#1049)
    • Preliminary compatibility with Swift 5 (backwards compatible with Swift 4) (#1044)
    • core: loggers os logger variations have been added (#1039)

    Internal

    • Sync internal queues to prevent cleaning up log files too soon in tests (#1053)
    • DDLog checks for NULL values and for global queue dispatching has been added (#1045)
    Source code(tar.gz)
    Source code(zip)
  • 3.5.1(Feb 4, 2019)

  • 3.5.0(Jan 25, 2019)

    Public

    • Added logFileHeader property to DDLogFileManagerDefault. Override to set header for each created file. #998
    • DDFileLogger now accepts a dispatch_queue_t which it uses to run callbacks. If not provided, the default global queue is used. #1003
    • Added opt-in buffering to DDFileLogger. Call wrapWithBuffer to create a file logger which buffers. #1001, #1012
    • Add DDAssert and DDAssertionFailure functions for Swift #934
    • Add DD_LOG_LEVEL define (which can be set in GCC_PREPROCESSOR_DEFINITIONS) for Swift to set default log level (enables stripping for strings that are not logged). #952
    • Add asyncLoggingEnabled global variable to control asynchronous logging. #1019

    Internal

    • Prevent memory access errors caused by a failed fetch #944
    • Fix common warnings emitted by -Wall, -Wconversion, -Wextra, etc #943, #931
    • Fixes issue that could cause log messages to become interleaved when there are multiple DDFileLoggers #985
    • DispatchQueueFormatter knows about com.apple.root.default-qos.overcommit now #932
    • Fix thread safety issues in DDFileLogger. Makes it a little harder to deadlock in some cases. #986, #1003, #946
    • Fix availability checks and memory leak #996

    Repository

    • Reduce podspec to two subspecs and remove customized modulemap #976
    • Add danger support for PR checks #962 - fixes #956
    • Merged framework targets + using xcconfig + deployment target iOS 8 and Mac OS 10.10 #959 e97da34
    • Documentation update #955 e7414ae 0239196 #933
    • Full links to Docs and other resources so they are resolved on external pages (i.e. https://cocoapods.org/pods/CocoaLumberjack) e9d6971
    • Replace OSAtomic with stdatomic in DDDispatchQueueLogFormatter #957 #958
    • Add Stale Bot + configuration #953
    • Update to Xcode 10 and Swift 4.2 compiler #950
    • Xcode 10 scheme changes #949
    • Update incomplete BSD 3-Clause License #942
    • Updated to CocoaPods 1.5.3 2d0590f
    • Use Xcode 9.4 image for tests #939
    • Xcode (schemes) version bumps #938
    • Update demo and documentation about CustomLogLevels #1023
    Source code(tar.gz)
    Source code(zip)
  • 3.4.2(Apr 17, 2018)

    • Update README.md #912
    • Fixed typo in pull request template #913
    • Fix -Wimplicit-retain-self warnings #915
    • Update memory management in dynamic logging #916
    • Xcode 9.3 support #921 #923 #926 #927
    • Add extern "C" for Objective-C++ #922
    • Add flush method to the DDFileLogger #928
    Source code(tar.gz)
    Source code(zip)
  • 3.4.1(Jan 26, 2018)

  • 3.4.0(Jan 3, 2018)

  • 3.3.0(Oct 3, 2017)

    • Fix CocoaLumberjackSwift-iOS #890. • Replace OSSpinLock with pthread_mutex #889. • Update to Swift 4 #893. • Build and analyzer warning fixes.

    Source code(tar.gz)
    Source code(zip)
  • 3.2.1(Aug 21, 2017)

    • Xcode 9 beta support #874 #873 #884 #883 #882
    • Fixed some issues around deleting log files #868 #879
    • update 'Use Log Level per Logger' doc #888
    • Remove empty asset catalogs so that they don't show up in Open Quickly #877
    • Fixed typo in pull request template #880
    Source code(tar.gz)
    Source code(zip)
  • 3.2.0(May 3, 2017)

    • Xcode 8.3 support #860 #853
    • added a very basic os_log (unified logging) logger #850 #856
    • Use NSFileProtectionType instead of NSString #866
    • Optimized timestamp calculation in DDTTYLogger #851
    • Updated docs #864
    • Fix Travis #863
    • Fixed nullability of DDLogMessage.function #849 DDExtractFileNameWithoutExtension #845
    • Ignore Carthage/Build directory #862
    • Updated schemes #859 #857
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(Feb 22, 2017)

    • Swift 3.0.1 and Xcode 8.1 support via #816
    • Fix Carthage build and updated the podspec structure #819 #818 #784 #790 #782 #778 #815
    • Fix CLIColor.h not included in umbrella header #781 #796 #813 #783
    • Fix crash in [DDLog log:level:flag:context:file:function:line:tag:format:] #831 #830
    • Code improvements:
      • using class properties #779
      • nullability #803 #809 #776
      • fix static analyzer issues #822 #828
      • optimized USE_DISPATCH_CURRENT_QUEUE_LABEL and USE_DISPATCH_GET_CURRENT_QUEUE macros #829
      • fixed dispatch_source_set_timer() usage #834
      • fixed misuse of non null parameter in DDFileLogger fileAttributes #835
      • store calendar in logger queue specifics for multi-thread safety #837
      • reenable default init method for DDLogMessage class #838
    • Added option to not copy messages #832
    • Added new hooks when adding loggers and formatters #836
    • Ability to create new log files every day #736
    • Skip messages in ASL logger which are filtered out by the formatter #786 #742
    • Fixed #823 by adding a hash implementation for DDFileLogger - same as isEqual, it only considers the filePath 7ceed08
    • Fix Travis CI build #807
    • Updated docs #798 #808 #811 #810 #820
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Sep 21, 2016)

    • Swift 3.0 and Xcode 8 support via #769, fixes #771 and #772. Many thanks to @ffried @max-potapov @chrisdoc @BarakRL @devxoul and the others who contributed
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Sep 19, 2016)

    • Swift 2.3 explicit so that the project compiles on Xcode 8 - #747 #773 fix #762 #763 #766
    • CocoaPods 1.0.0 fully adopted - 0f5a793 637dfc1 70439fe #729
    • Fix CLIColor.h not found for non-AppKit binaries w/o clang modules #745
    • Retrieve the DDLogLevel of each logger associated to DDLog #753
    • updated doc: #727 a9f54c9 #741, diagrams in 8bd128d
    • Added CONTRIBUTING, ISSUE and PULL_REQUEST TEMPLATE and added a small Communication section to the Readme
    • Fixed an issue with one demo #760
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(May 2, 2016)

    • Updated to Swift 2.2 - #704
      • replaced deprecated __FUNCTION__, __FILE__, __LINE__ with newly added to Swift 2.2: #function, #file, #line
    • Xcode 7.3 update - #692 #662
    • simplify usage and integration of the static library target - #657
    • DDLog usable via instances - #679
    • Swift cleanup - #649
    • Enable Application extension API only for tvOS - #701
    • Added appletvos and appletvsimulator to SUPPORTED_PLATFORMS and set TVOS_DEPLOYMENT_TARGET - #707
    • fixed OSSpinLock init issue - #653
    • Added check to prevent duplicate loggers - #682
    • fixed typo in import - #693
    • updated the docs - #646 #650 #656 #655 #661 #664 #667 #684 #724
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Oct 28, 2015)

  • 2.1.0(Oct 23, 2015)

  • 2.1.0-rc(Oct 22, 2015)

    • Refactored the NSDateFormatter related code to fix a bunch of issues: #621
    • Fix Issue #488: Support DDLog without AppKit Dependency (#define DD_CLI): #627
    • Re-add NS_DESIGNATED_INITIALIZER #619
    Source code(tar.gz)
    Source code(zip)
  • 2.0.3(Oct 13, 2015)

  • 2.1.0-beta(Oct 12, 2015)

  • 2.0.2(Oct 12, 2015)

    • Swift 1.2 fixes #546 #578 plus and update to Swift 2.0 5627dff imported from our swift_2.0 branch
    • Make build work on tvOS #597
    • Make CocoaLumberjackSwift-iOS target depends on CocoaLumberjack-iOS #575
    • APPLICATION_EXTENSION_API_ONLY to YES for Extensions #576
    • Remove unnecessary NS_DESIGNATED_INITIALIZERs #593 fixes #592
    • Add ignore warning mark for DDMakeColor #553
    • Kill unused function warnings from DDTTYLogger.h #613
    • Flag unused parameters as being unused to silence strict warnings #566
    • Extend ignore unused warning pragma to cover all platforms #559
    • Removed images.xcassets from Mobile project #580
    • Silence the Xcode 7 upgrade check - #595
    • Fix import for when CL framework files are manually imported into project #560
    • Don't override defines in case they're already set at project level #551
    • log full filepath when failing to set attribute #550
    • Fix issue in standalone build with DDLegacyMacros.h #552
    • Update CustomFormatters.md with proper thread-safe blurb #555
    • typo in parameter's variable name fixed #568
    • Typo: minor fix #571
    • Surely we should be adding 1, not 0 for OSAtomicAdd32 ? #587
    • rollLogFileWithCompletionBlock calls back on background queue instead of main queue #589
    • Removing extraneous \ on line 55 #600
    • Updated GettingStarted.md to include ddLogLevel #602
    • Remove redundant check for processorCount availability #604
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Jun 24, 2015)

    • Carthage support #521 #526
    • fixed crash on DDASLLogCapture when TIME or TIME_NSEC is NULL #484
    • Swift fixes and improvements: #483 #509 #518 #522 5eafceb
    • Unit tests: #500 #498 #499
    • Fix #478 by reverting #473
    • Add armv7s to static library #538
    • Fix NSLog threadid mismatch with iOS 8+/OSX 10.10+ #514
    • Fixed the LogV macros so that avalist is no longer undefined #511
    • Using type safe DDColor alias instead of #define directive #506
    • Several fixes/tweaks to DDASLLogCapture #512
    • Prevent duplicate log entries when both DDASLLogCapture and DDASLLogger are used #515
    • Fix memory leaks in DDTTYLogger, add self annotations to blocks #536
    • Update older syntax to modern subscripting for array access #482
    • Remove execute permission on non-executable files #517
    • Change code samples to use DDLogFlagWarning #520
    • Fix seemingly obvious typo in the toLogLevel function #508
    Source code(tar.gz)
    Source code(zip)
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
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
JustLog brings logging on iOS to the next level. It supports console, file and remote Logstash logging via TCP socket with no effort. Support for logz.io available.

JustLog JustLog takes logging on iOS to the next level. It supports console, file and remote Logstash logging via TCP socket with no effort. Support f

Just Eat 509 Dec 10, 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 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
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
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
A modern, flexible logging tool

NSLogger NSLogger is a high performance logging utility which displays traces emitted by client applications running on macOS, iOS and Android. It rep

Florent Pillet 5k Dec 22, 2022
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
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
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
Simple logging for simples needs.

Simple logging for simples needs.

native.dev.br 0 May 30, 2022
A simple logging package for Swift

OhMyLog OhMyLog is a simple logging package for Swift. It supports the following features: Six logging levels ( ?? , ?? , ?? , ⚠️ , ?? , ?? ) Display

Junhao Wang 1 Jan 10, 2022
A simple, straightforward logging API.

Sequoia A simple, straightforward logging API. Install Add the following to your Package.swift file: import PackageDescription let package = Package(

Jordan Baird 0 Dec 18, 2022
Elegant and extensive logging facility for OS X & iOS (includes database, Telnet and HTTP servers)

Overview XLFacility, which stands for Extensive Logging Facility, is an elegant and powerful logging facility for OS X & iOS. It was written from scra

Pierre-Olivier Latour 315 Sep 7, 2022
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
A fancy logger yet lightweight, and configurable. 🖨

?? ?? Important: Printer can only print console logs if you're running an app in the Simulator. If you're running in a real device it will not print a

Hemang 66 Dec 7, 2022