     code = @_levels[level]
     return typeof code != 'undefined' && code <= @_levels[currentLevel]
 
+  # Enables the Log functions if they have been disabled.
   on: ->
     return if @_loggingOn
     @_loggingOn = true
     _.each Object.keys(FunctionReferences), (f) => @[f] = FunctionReferences[f]
 
+  # Disables the Log functions.
   off: ->
     return unless @_loggingOn
     @_loggingOn = false

global = @
console = global.console

# For those without a console
if typeof console == 'undefined'
  console = {}
  funcs = ['log', 'debug', 'error', 'warn', 'time', 'timeEnd']
  _.each FunctionReferences, (func, funcName) ->
    # Ignorance is bliss
    console[funcName] = ->

if Meteor?
  # Log is already defined in the logging pacakge, so we define a different global variable for now.
  Logger = Log


  error: -> @shouldLog('error') && Log.msg('ERROR', arguments, console.error)

  # Prints the message in `args` to the console function `func` (defaults to `console.log`),
  # prepended with the string `[channel]`.
  msg: (channel, args, func) ->
    return if @level == 'off'
    func = Setter.defaultValue(func, console.log)
    # Ensure the message string is at least five characters for prettier printing.
    if channel.length < 5
      channel += Array(6 - channel.length).join(' ')

    args = Array.prototype.slice.call(args)
    args.splice(0, 0, '[' + channel + '] ')
    func.apply(console, args)
    # Logging should have no return.
    return undefined

  # Prints a stack trace from the caller's point of execution.
  trace: ->
    e = new Error('dummy')
    stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '')
