Ejemplo n.º 1
0
        static void LogAndShowCore(Exception?e,
                                   Action <string>?show,
                                   string?tag        = null, ILogger?logger = null, LogLevel level = LogLevel.Error,
                                   string memberName = "",
                                   string?msg        = null, params object?[] args)
        {
            bool has_msg = !string.IsNullOrWhiteSpace(msg);

            if (!has_msg)
            {
                if (!string.IsNullOrWhiteSpace(memberName))
                {
                    msg     = $"{memberName} Error";
                    has_msg = true;
                }
            }
            var has_args = args.Any_Nullable();
            var has_e    = e != null;

            if (has_e)
            {
                var knownType = e !.GetKnownType();
                if (knownType != ExceptionKnownType.Unknown)
                {
                    level = LogLevel.None;
                }
            }
            var has_log_level = level < LogLevel.None;

            if (has_log_level)
            {
                if (logger == null && tag != null)
                {
                    logger = Log.CreateLogger(tag);
                }
                if (logger != null)
                {
                    if (has_args)
                    {
                        logger.Log(level, e, msg !, args);
                    }
                    else
                    {
                        logger.Log(level, e, msg !);
                    }
                }
            }
            show?.Invoke(GetShowMsg());
            string GetShowMsg()
            {
                if (has_e)
                {
                    return(GetAllMessageCore(e !, has_msg, has_args, msg, args));
                }
                if (has_msg)
                {
                    if (has_args)
                    {
                        return(msg !.Format(args));
                    }
                    else
                    {
                        return(msg !);
                    }
                }
                return("");
            }
        }