/**
  * Logs with an arbitrary level.
  *
  * @param mixed $level
  * @param string $message
  * @param array $context
  * @return null
  */
 public function log($level, $message, array $context = array())
 {
     foreach ($context as $key => $value) {
         $message = str_replace('{' . $key . '}', $value, $message);
     }
     $rec = new CRM_Civiruleslogger_DAO_CivirulesLog();
     $separateFields = array('contact_id', 'rule_id');
     foreach ($separateFields as $separateField) {
         if (isset($context[$separateField])) {
             $rec->{$separateField} = $context[$separateField];
             unset($context[$separateField]);
         }
     }
     $rec->level = $level;
     $rec->message = $message;
     $rec->context = json_encode($context);
     $rec->save();
 }
 /**
  * Returns the list of fields that can be exported
  *
  * @param bool $prefix
  *
  * @return array
  */
 static function &export($prefix = false)
 {
     if (!self::$_export) {
         self::$_export = array();
         $fields = self::fields();
         foreach ($fields as $name => $field) {
             if (CRM_Utils_Array::value('export', $field)) {
                 if ($prefix) {
                     self::$_export['civirule_civiruleslogger_log'] =& $fields[$name];
                 } else {
                     self::$_export[$name] =& $fields[$name];
                 }
             }
         }
     }
     return self::$_export;
 }