public static Dictionary FilterLoggableFields()

in src/Middleware/Grpc/Server/CtxLogger.cs [73:112]


    public static Dictionary<string, object> FilterLoggableFields(
        Dictionary<string, object> fieldMap, 
        MessageDescriptor descriptor)
    {
        if (fieldMap == null || descriptor == null)
        {
            return fieldMap ?? new Dictionary<string, object>();
        }

        foreach (var fieldName in fieldMap.Keys.ToList())
        {
            var fieldDescriptor = descriptor.FindFieldByName(fieldName);
            if (fieldDescriptor == null)
            {
                continue;
            }

            var options = fieldDescriptor.GetOptions();
            if (options != null)
            {
                bool hasLoggable = options.HasExtension(LogExtensions.Loggable);
                if (hasLoggable && !options.GetExtension(LogExtensions.Loggable))
                {
                    fieldMap.Remove(fieldName);
                    continue;
                } 
            }

            if (fieldMap[fieldName] is Dictionary<string, object> subMap && 
                fieldDescriptor.FieldType == FieldType.Message)
            {
                var subMessageDescriptor = fieldDescriptor.MessageType;
                if (subMessageDescriptor != null)
                {
                    fieldMap[fieldName] = FilterLoggableFields(subMap, subMessageDescriptor);
                }
            }
        }
        return fieldMap;
    }