private void LogInternal <T>(LogType logType, string logMessage, object[] logParameters, int area, Exception exception, string callerName)
        {
            var    logger              = CreateLogger <T>();
            string className           = typeof(T).Name;
            var    eventClassification = _eventIdMapper.GetEventClassification(className, callerName, area, exception?.GetType());
            var    eventId             = new EventId(eventClassification.EventId, eventClassification.Name);

            switch (logType)
            {
            case LogType.Information:
                logger.LogInformation(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;

            case LogType.Error:
                logger.LogError(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;

            case LogType.Critical:
                logger.LogCritical(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;

            case LogType.Debug:
                logger.LogDebug(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;

            case LogType.Trace:
                logger.LogTrace(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;

            case LogType.Warning:
                logger.LogWarning(
                    eventId,
                    exception,
                    logMessage,
                    logParameters);
                break;
            }
        }