 			level: 0
 
 	constructor: (@name, config={}) ->
+		self = @
 		@config = {}
 
 		_.extend @config, config


		if @config.methods?
			for method, typeConfig of @config.methods
				do (method, typeConfig) =>
					if @[method]?
						@warn "Method", method, "already exists"

					if not @defaultTypes[typeConfig.type]?
						@warn "Method type", typeConfig.type, "doest not exists"

					@[method] = (args...) =>
						@_log
							type: typeConfig.type
							level: if typeConfig.level? then typeConfig.level else @defaultTypes[typeConfig.type]?.level
							method: method
							arguments: args

					@[method+"_box"] = (args...) =>
						@_log
							type: typeConfig.type
							box: true
							level: if typeConfig.level? then typeConfig.level else @defaultTypes[typeConfig.type]?.level
							method: method
							arguments: args

		LoggerManager.register @
		return @

	getPrefix: (options) ->
		prefix = "#{@name} ➔ #{options.method}"

		details = @_getCallerDetails()


			return LoggerManager.loggers[@name]

		for type, typeConfig of @defaultTypes
			do (type, typeConfig) ->
				self[type] = (args...) ->
					self._log.call self,
						section: this.__section
						type: type
						level: typeConfig.level
						method: typeConfig.name
						arguments: args

				self[type+"_box"] = (args...) ->
					self._log.call self,
						section: this.__section
						type: type
						box: true
						level: typeConfig.level
