<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def formatLog(source="", level="", title="", data={}):
 """ Similar to format, but takes additional reserved params to promote logging best-practices :param level - severity of message - how bad is it? :param source - application context - where did it come from? :param title - brief description - what kind of event happened? :param data - additional information - what details help to investigate? """

  # consistently output empty string for unset params, because null values differ by language
  source = "" if source is None else source
  level = "" if level is None else level
  title = "" if title is None else title
  
  if not type(data) is dict:
    data = {}
  data['source'] = source
  data['level'] = level
  data['title'] = title

  return format(data)