Remove tags/logs in report JSON, if there is no tag or log
diff --git a/lib/skywalking/segment.lua b/lib/skywalking/segment.lua
index 02b6cfc..346842d 100644
--- a/lib/skywalking/segment.lua
+++ b/lib/skywalking/segment.lua
@@ -67,9 +67,12 @@
     segmentBuilder.serviceInstanceId = self.service_inst_id
 
     segmentBuilder.spans = {}
-    for i, span in ipairs(self.spans)
-    do 
-        segmentBuilder.spans[#segmentBuilder.spans + 1] = span:transform()
+
+    if self.spans ~= nil and #self.spans > 0 then
+        for i, span in ipairs(self.spans)
+        do 
+            segmentBuilder.spans[#segmentBuilder.spans + 1] = span:transform()
+        end
     end
 
     return segmentBuilder
diff --git a/lib/skywalking/span.lua b/lib/skywalking/span.lua
index 6f8f3e1..6c5d06a 100644
--- a/lib/skywalking/span.lua
+++ b/lib/skywalking/span.lua
@@ -171,8 +171,6 @@
     -- o.start_time = Util.timestamp()
     o.refs = {}
     o.owner = context
-    o.tags = {}
-    o.logs = {}
 
     return o
 end
@@ -265,6 +263,10 @@
         return self
     end
 
+    if self.tags == nil then
+        self.tags = {}
+    end
+
     local tag = {key = tagKey, value = tagValue}
     self.tags[#self.tags + 1] = tag
 
@@ -277,6 +279,10 @@
         return self
     end
 
+    if self.logs == nil then
+        self.logs = {}
+    end
+
     local logEntity = {time = timestamp, data = keyValuePairs}
     self.logs[#self.logs + 1] = logEntity
 
diff --git a/lib/skywalking/tracing_context.lua b/lib/skywalking/tracing_context.lua
index 78976b7..47fcfe6 100644
--- a/lib/skywalking/tracing_context.lua
+++ b/lib/skywalking/tracing_context.lua
@@ -110,6 +110,8 @@
 
     if self.internal.active_count ~= 0 then
         return false, nil
+    elseif #self.internal.finished_spans == 0 then
+        return false, nil
     else
         local segment = Segment:new()
         segment.trace_id = self.trace_id