Esempio n. 1
0
        /// <inheritdoc/>
        public void Log(
            string header,
            string message,
            MessageLevelEnum level,
            LoggingTargetEnum outputTarget = LoggingTargetEnum.LogFile | LoggingTargetEnum.TraceTool | LoggingTargetEnum.OutputPanel,
            bool shouldLogHeader           = true,
            bool isHeaderResourceKey       = false)
        {
            Debug.Assert(!string.IsNullOrWhiteSpace(header), DevConstants.ValueCannotBeNullOrWhitespace);
            Debug.Assert(!string.IsNullOrWhiteSpace(message), DevConstants.ValueCannotBeNullOrWhitespace);

            var logToOutputPanel = (outputTarget & LoggingTargetEnum.OutputPanel) == LoggingTargetEnum.OutputPanel;

            var messageToLog = message;

            if (shouldLogHeader || logToOutputPanel)
            {
                var headerToLog = isHeaderResourceKey ? _localisationService.GetLocalisedString(header) : header;

                if (shouldLogHeader)
                {
                    messageToLog = $"{headerToLog}: {message}";
                }

                if (logToOutputPanel)
                {
                    var watchLookup = new WatchLookup(headerToLog, message, _dateTimeService.Now, level);

                    var outputMessage = _messageFactory.CreateOutputMessage(this, watchLookup, messageLevel: level);
                    _messengerService.Send(outputMessage);
                }
            }

            if ((outputTarget & LoggingTargetEnum.LogFile) == LoggingTargetEnum.LogFile)
            {
                _logActionDictionary[level](messageToLog);
            }

            if (_traceService.IsEnabled && (outputTarget & LoggingTargetEnum.TraceTool) == LoggingTargetEnum.TraceTool)
            {
                _traceService.Send(messageToLog, level);
            }
        }