diff --git a/packages/rocketchat-lib/lib/configLogger.coffee b/packages/rocketchat-lib/lib/configLogger.coffee new file mode 100644 index 00000000000..37496802ad5 --- /dev/null +++ b/packages/rocketchat-lib/lib/configLogger.coffee @@ -0,0 +1,12 @@ +RocketChat.settings.get 'Log_Package', (key, value) -> + LoggerManager?.showPackage = value + +RocketChat.settings.get 'Log_File', (key, value) -> + LoggerManager?.showFileAndLine = value + +RocketChat.settings.get 'Log_Level', (key, value) -> + if value? + LoggerManager?.logLevel = parseInt value + Meteor.setTimeout -> + LoggerManager?.enable(true) + , 200 diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index c901325a8af..65aabf8cce3 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -35,6 +35,7 @@ Package.onUse(function(api) { // COMMON LIB api.addFiles('lib/settings.coffee'); + api.addFiles('lib/configLogger.coffee'); api.addFiles('lib/callbacks.coffee'); api.addFiles('lib/slashCommand.coffee'); api.addFiles('lib/Message.coffee'); diff --git a/packages/rocketchat-lib/server/startup/settings.coffee b/packages/rocketchat-lib/server/startup/settings.coffee index af91d9ec18d..20a6e48712c 100644 --- a/packages/rocketchat-lib/server/startup/settings.coffee +++ b/packages/rocketchat-lib/server/startup/settings.coffee @@ -164,6 +164,12 @@ RocketChat.settings.addGroup 'Layout', -> @add 'Layout_Login_Terms', 'By proceeding to create your account and use Rocket.Chat, you are agreeing to our Terms of Service and Privacy Policy. If you do not agree, you cannot use Rocket.Chat.', { type: 'string', multiline: true, public: true } +RocketChat.settings.addGroup 'Logs', -> + @add 'Log_Level', '0', { type: 'select', values: [ { key: '0', i18nLabel: '0_Errors_Only' }, { key: '1', i18nLabel: '1_Errors_and_Information' }, { key: '2', i18nLabel: '2_Erros_Information_and_Debug' } ] , public: true } + @add 'Log_Package', false, { type: 'boolean', public: true } + @add 'Log_File', false, { type: 'boolean', public: true } + + RocketChat.settings.init() # Remove runtime settings (non-persistent) diff --git a/packages/rocketchat-logger/server.coffee b/packages/rocketchat-logger/server.coffee index c8da998332b..3d5f1eb5753 100644 --- a/packages/rocketchat-logger/server.coffee +++ b/packages/rocketchat-logger/server.coffee @@ -1,9 +1,12 @@ @LoggerManager = new class extends EventEmitter constructor: -> + @enabled = false @loggers = {} - @showPackage = true - @showFileAndLine = true - @logLevel = 2 + @queue = [] + + @showPackage = false + @showFileAndLine = false + @logLevel = 0 register: (logger) -> if not logger instanceof Logger @@ -13,12 +16,41 @@ @emit 'register', logger -@LoggerManager.on 'register', -> - console.log('on register', arguments) + addToQueue: (logger, args)-> + @queue.push + logger: logger + args: args + + dispatchQueue: -> + for item in @queue + item.logger._log.apply item.logger, item.args + + @clearQueue() + + clearQueue: -> + @queue = [] + + disable: -> + @enabled = false + + enable: (dispatchQueue=false) -> + @enabled = true + if dispatchQueue is true + @dispatchQueue() + else + @clearQueue() + + +# @LoggerManager.on 'register', -> +# console.log('on register', arguments) @Logger = class Logger defaultTypes: + debug: + name: 'debug' + color: 'blue' + level: 2 log: name: 'info' color: 'blue' @@ -27,10 +59,6 @@ name: 'info' color: 'blue' level: 1 - debug: - name: 'debug' - color: 'blue' - level: 2 warn: name: 'warn' color: 'magenta' @@ -83,9 +111,10 @@ details = @_getCallerDetails() detailParts = [] - if details.package? and LoggerManager.showPackage is true + if details.package? and (LoggerManager.showPackage is true or options.type is 'error') detailParts.push details.package - if LoggerManager.showFileAndLine is true + + if LoggerManager.showFileAndLine is true or options.type is 'error' if details.file? and details.line? detailParts.push "#{details.file}:#{details.line}" else @@ -153,6 +182,10 @@ return details _log: (options) -> + if LoggerManager.enabled is false + LoggerManager.addToQueue @, arguments + return + options.level ?= 1 if LoggerManager.logLevel < options.level