     ///   - eventLabel: a label for this event
     ///   - eventValue: a value as NSNumber for this event
     func tagEvent(_ parameters: [AnyHashable: Any]) {
-        if let category = parameters["eventCategory"], let action = parameters["eventAction"] {
-            let label = parameters["eventLabel"];
-            let value = parameters["eventValue"];
+        if let category = parameters[EVENT_CATEGORY], let action = parameters[EVENT_ACTION] {
+            let label = parameters[EVENT_LABEL];
+            let value = parameters[EVENT_VALUE];
 
             let builder: NSObject = GAIDictionaryBuilder.createEvent(withCategory: category as! String,
                                                                      action: action as! String,
                                                                      label: label as? String,
                                                                      value: value as? NSNumber).build();
             self.tracker.send(builder as! [NSObject : AnyObject]);
-        }
-        else if (parameters["eventCategory"] == nil) {
-            logger.logMissingParam("eventCategory", methodName: "GA_tagEvent");
-        }
-        else {
-            logger.logMissingParam("eventAction", methodName: "GA_tagEvent");
+            logger.logParamSetWithSuccess(EVENT_CATEGORY, value: category);
+            logger.logParamSetWithSuccess(EVENT_ACTION, value: action);
+            if (label != nil) {
+                logger.logParamSetWithSuccess(EVENT_LABEL, value: label!);
+            }
+            if (value != nil) {
+                logger.logParamSetWithSuccess(EVENT_VALUE, value: value!);
+            }
+        }
+        else {
+            logger.logMissingParam("\([EVENT_ACTION, EVENT_CATEGORY])", methodName: GA_TAG_EVENT);
         }
     }
 

        gai?.trackUncaughtExceptions = true;  // report uncaught exceptions
        // the log level of GA is decided from the log level of the Cargo logger
        switch (logger.level) {
        case kTAGLoggerLogLevelNone:
            gai?.logger.logLevel = GAILogLevel.none;
            break ;
        case kTAGLoggerLogLevelInfo:
            gai?.logger.logLevel = GAILogLevel.info;
            break ;
        case kTAGLoggerLogLevelWarning:
            gai?.logger.logLevel = GAILogLevel.warning;
            break ;
        case kTAGLoggerLogLevelDebug:
            gai?.logger.logLevel = GAILogLevel.warning;
            break ;
        case kTAGLoggerLogLevelVerbose:
            gai?.logger.logLevel = GAILogLevel.verbose;
            break ;
        default:
            gai?.logger.logLevel = GAILogLevel.error;
        }
    }


            let builder: NSObject = GAIDictionaryBuilder.createScreenView().build();
            // send the screen event
            self.tracker.send(builder as! [NSObject : AnyObject]);
            logger.logParamSetWithSuccess(SCREEN_NAME, value: screenName);
        }
        else {
            logger.logMissingParam(SCREEN_NAME, methodName: GA_TAG_SREEN);
        }
    }
    
