If you have a maximum number of content blocks, let's say 5, then I think below would be your best bet for handling a log of the blocks you use for each subscriber:
%%[
/* set content block values */
SET @Block1 = 12345
SET @Block2 = 23456
SET @Block3 = 34567
SET @Block4 = 45678
SET @Block5 = 56789
/* example of calling a content block */
]%%
%%=ContentBlockByID(@Block1)=%%
%%[
/* Push info into Log */
SET @insert = InsertDE('logDE','SubscriberKey',_subscriberkey, 'Job', jobid, 'emailname', _emailname, 'Block1',@Block1, 'Block2',@Block2,'Block3',@Block3,'Block4',@Block4,'Block5',@Block5,'InsertDate',NOW())
]%%
This will then push the corresponding blocks into a DE that will have 3 primary keys (Subscriberkey, Job, and EmailName) which will allow you to collect via multiple sends into the same DE and help separate between sends if you send to same email multiple times.
Columns for your DE:
SubscriberKey | Job | EmailName | Block1 | Block2 | Block3 | Block4 | Block5 | InsertDate
Pkey | Pkey | Pkey | Nullable | Nullable | Nullable | Nullable | Nullable | Nullable
There are other options utilizing dynamic variable creations that can be done, but the level of processing and complexity for this may be higher than the value they offer.