public void Log(Type type, Common.Core.LogLevel level, Exception exception, string message, params object[] args)
        {
            ILogger logger = getLogger(this.GetType());

            var logEvent = getLogEvent(type, level, exception, message, args);

            logger.Log(logEvent);
        }
        private LogEventInfo getLogEvent(Type type, Common.Core.LogLevel level, Exception exception, string format, object[] args)
        {
            string assemblyProp     = string.Empty;
            string classProp        = string.Empty;
            string methodProp       = string.Empty;
            string messageProp      = string.Empty;
            string innerMessageProp = string.Empty;

            var logEvent = new LogEventInfo(NLogLogger.LogLevel.FromOrdinal((int)level), type.FullName, string.Format(format, args));

            logEvent.Exception = exception;

            if (exception != null)
            {
                assemblyProp = exception.Source;
                classProp    = exception.TargetSite.DeclaringType.FullName;
                methodProp   = exception.TargetSite.Name;
                messageProp  = exception.Message;

                if (exception.InnerException != null)
                {
                    innerMessageProp = exception.InnerException.Message;
                }
            }
            else
            {
                assemblyProp = type.FullName;
                classProp    = type.Name;
            }

            if (logEvent.Properties.Count > 0)
            {
                logEvent.Properties["LOGGER"]     = assemblyProp;
                logEvent.Properties["CLASS"]      = classProp;
                logEvent.Properties["METHOD"]     = methodProp;
                logEvent.Properties["EXCEPTION"]  = messageProp;
                logEvent.Properties["STACKTRACE"] = innerMessageProp;
            }

            return(logEvent);
        }