Who and when were changed Database default location settings?
I don't think you'll be able to find that out. SQL Server doesn't track this information by default (e.g. in the default trace or system health extended event session), and in fact if you go through the UI and click the Script button instead of saying OK, you will see it just generates a script like this, which writes directly to the registry:

USE [master]
GO
EXEC xp_instance_regwrite
   N'HKEY_LOCAL_MACHINE', 
   N'Software\Microsoft\MSSQLServer\MSSQLServer', 
   N'DefaultLog', REG_SZ, N'C:\new path'
GO


This value is then pulled from the registry next time SQL Server starts (so there is no event to trap when the action happens).

Going forward, you may be able to capture calls to xp_instance_regwrite using something like SQL Server Audit or a targeted server-side trace, but that doesn't help you for something that happened in the past, before something like this is set up.

Sounds like a more appropriate action - rather than trying to figure out who did something you didn't want them to do - is to take away their rights to do things you don't want them to do (e.g. people who you can't trust, or who won't own up to doing something like this, shouldn't have sysadmin).