Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Version License Platform

A simple Swift logger using print in Debug and NSLog in Production.


  • Uses print in Debug and NSLog in Production.
  • Format output in Debug and in Production.
  • Supports log levels
  • Contains the date, the log level, the file, the line and the function of the log’s call.
  • Is unit tested.


  • iOS 9.0+
  • Mac OS X 10.15+
  • WatchOS 2.0+
  • TV OS 9.0+


NoveLogger uses CocoaPods. It is a dependency manager for Cocoa projects.

To integrate NoveLogger into your Xcode project using CocoaPods, specify it in your Podfile:

source ''

pod 'NoveLogger', '~> 1.0'

Then, run the following command:

$ pod install



Import NoveLogger first:

import NoveLogger

You have 3 ways to log:

// Using static functions (it will use the default logger)
NoveLogger.verbose("Your log message")

// Using the default logger
NoveLogger.defaultLogger.verbose("Your log message")

// Using an instanciated logger
let logger = NoveLogger()
logger.verbose("Your log message")

Here is an exemple of an output:

2019-12-02 15:25:41.031 [VERBOSE] [NoveLoggerTests.swift:42] testSimpleMessage(): Your log message

Log levels

NoveLogger allows 5 log levels:

NoveLogger.verbose("Verbose log.")
NoveLogger.debug("Debug log.")"Info log.")
NoveLogger.warning("Warning log.")
NoveLogger.error("Error log.")

A log will not be outputted if its level is lower than the log level defined in the logger.

let logger = NoveLogger()
logger.logLevel = .info
logger.verbose("This message will not be printed.")
logger.error("This message will be printed.")

When you set the log level of your logger, you can set, from low to high:

.all // Everything will be printed.
.off // Nothing will be printed.

By default, log levels are set as .all in Debug and .warning in Production.

You can override the default logger level by calling (for example):

NoveLogger.defaultLogger.logLevel = .debug


You can use format to include contents into your log:

NoveLogger.verbose("Here is a message containing %d %@.", args: 2, "arguments")

> 2019-12-02 15:25:40.023 [VERBOSE] [NoveLoggerTests.swift:51] testFormat(): Here is a message containing 2 arguments.


Steve Gigou (Website, Twitter)


NoveLogger is available under the MIT license. See the LICENSE file for more informations.