Home

Awesome

SLF4Swift - Simple Loging Facade for Swift

Join the chat at https://gitter.im/phimage/SLF4Swift License Platform Language Issues Cocoapod Carthage compatible

<img align="left" src="logo.png" hspace="20"> Simple Log Facade for Swift serves as a simple facade for logging frameworks allowing the end user to plug in the desired logging framework at deployment time

let myLogger = SLF4Swift.getLogger("loggerName")
myLogger.info("my info message")
myLogger.log(.Error, "my error message")

Not already chosen a logging framework? Don't want to be tied to a specific framework and want to switch (or even combine) easily? Why not uing a logging facade?

A Simple Logging Facade

For framework or any part of codes not linked to a logging framework

Getting Logger

Getting the default one

let myLogger = SLF4Swift.defaultLogger

Get logger using a key or create if not exist

let myLogger = SLF4Swift.createLogger("loggerKey")

Or just get it - here logger could be nil if not already created

if let myLogger = SLF4Swift.getLogger("loggerKey") {..}

A key could be a framework name, a class name, a topic name, ....

If you use a key into a framework, create a public constant to allow the end user to decide according to this key what to do with your logs (see <a href="#custom_factories_and_loggers">Custom factories and loggers</a>)

Printing like any other log framework

myLogger.log(.Error, "my error message") // basic method
// and some shortcut
myLogger.info("my info message")
myLogger.warn("my warn message")
...
// if message compute in a long period of time
if myLogger.isLoggable(.Verbose) {
	myLogger.log(.Verbose, createLongMessageClosure())
}
if myLogger.exec(.Verbose) { // or with closure
	myLogger.log(.Verbose, createLongMessageClosure())
}

There is also macro functions for default logger

SLFLogInfo("info message")
SLFLog(.Verbose, "verbose message")
...

By declaring typealias Log = SLFLogLevel you can also use default logger like this

Log.Info.message("info message")
Log.Verbose.message("verbose message")
Log.Verbose.trace()// print file, function and line

For the end user

Installing a logger factory

By default is installed a NullLoggerFactory, which disable all logs

SLF4Swift.setSharedFactory(NullLoggerFactory.instance)

To enable log, set your LogFactoryType

SLF4Swift.setSharedFactory(MyCustomLoggerFactory())

or add DEBUG to "Other Swift Flags" into "Swift Compiler - Custom Flags" section this add by default a SLFLoggerFactory, which use by default print()

SLF4Swift.setSharedFactory(SLFLoggerFactory.sharedInstance)

Some backend factories are already implemented into backend folder (see setup for pod)

SLF4Swift.setSharedFactory(CocoaLumberjackMacroLoggerFactory.instance)

Custom factories and loggers

You can your create your own LogFactoryType and/or LoggerType

class MyCustomLoggerFactory: ProxyLoggerFactory {

    func getLogger(name: LoggerKeyType) -> LoggerType? {
    	if name == AFrameWorkKey {
        	return NullLogger.instance // deactive log for specifc logger
        }
        else if name == AnOtherFrameWorkKey {
        	var logger = super.getLogger(name)
            logger.level = .DEBUG // set a specific log level
        	return logger
        }
        return super.getLogger(name)
    }

What you can use

To create a custom LogFactoryType extend

Some basic loggers are already implemented into implementation folder (log to a file, using nslog, ...)

Contributing

Don't hesitate to fork this repository and PR additionnal LogFactoryType for your logging framework

See CONTRIBUTING.md

Setup

Using cocoapods

Add pod 'SLF4Swift' to your Podfile and run pod install.

Add use_frameworks! to the end of the Podfile.

Backend

CocoaLumberjack pod 'SLF4Swift/CocoaLumberjack'

XCGLogger pod 'SLF4Swift/XCGLogger'

SpeedLog pod 'SLF4Swift/SpeedLog'

Loggerithm pod 'SLF4Swift/Loggerithm'

Make your own framework dependent

In podspec

s.dependency 'SLF4Swift'

For additional logger ie. simple implementation

Add pod 'SLF4Swift/Impl' to your Podfile

Using xcode project

  1. Drag the.xcodeproj file to your project/workspace or open it to compile it
  2. Add the framework to your project

Issues

Licence

The MIT License (MIT), see LICENSE file