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(""); } }