Akka.Interfaced.LogFilter.LogProxyBuilder.GetLoggerAccessor C# (CSharp) Method

GetLoggerAccessor() private static method

private static GetLoggerAccessor ( Type targetType, string loggerName ) : Tuple>
targetType System.Type
loggerName string
return Tuple>
        private static Tuple<Type, Func<object, object>> GetLoggerAccessor(Type targetType, string loggerName)
        {
            const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;

            if (string.IsNullOrEmpty(loggerName))
            {
                // *Logger* field
                var field = targetType.GetFields(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("logger"));
                if (field != null)
                    return Tuple.Create<Type, Func<object, object>>(field.FieldType, o => field.GetValue(o));

                // *Logger* property
                var property = targetType.GetProperties(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("logger"));
                if (property != null)
                    return Tuple.Create<Type, Func<object, object>>(property.PropertyType, o => property.GetValue(o));

                // *Log* field
                var field2 = targetType.GetFields(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("log"));
                if (field2 != null)
                    return Tuple.Create<Type, Func<object, object>>(field2.FieldType, o => field2.GetValue(o));

                // *Log* property
                var property2 = targetType.GetProperties(bindingFlags).FirstOrDefault(f => f.Name.ToLower().Contains("log"));
                if (property2 != null)
                    return Tuple.Create<Type, Func<object, object>>(property2.PropertyType, o => property2.GetValue(o));
            }
            else
            {
                var field = targetType.GetField(loggerName, bindingFlags);
                if (field != null)
                    return Tuple.Create<Type, Func<object, object>>(field.FieldType, o => field.GetValue(o));

                var property = targetType.GetProperty(loggerName, bindingFlags);
                if (property != null)
                    return Tuple.Create<Type, Func<object, object>>(property.PropertyType, o => property.GetValue(o));
            }

            return null;
        }