]> git.mxchange.org Git - flightgear.git/commitdiff
Minor logging changes.
authordavid <david>
Sat, 1 Feb 2003 17:59:52 +0000 (17:59 +0000)
committerdavid <david>
Sat, 1 Feb 2003 17:59:52 +0000 (17:59 +0000)
All logs and log entries are now disabled by default, unless
explicitly enabled by an 'enabled' property.  This works much more
intuitively with the GUI dialog.

docs-mini/README.logging
src/Main/logger.cxx
src/Main/logger.hxx

index 4e376a5bd32908a236842a0b81a3131e40c2e0c2..6321d39fc7ac3c244e5f07a8bb54ac9c3a1ff058 100644 (file)
@@ -15,36 +15,40 @@ anyway) as the field delimiter:
 
  <logging>
   <log>
+   <enabled>true<enabled>
    <filename>steering.csv</filename>
    <interval-ms>1000</interval-ms>
    <delimiter>,</delimiter>
    <entry>
+    <enabled>true</enabled>
     <title>Rudder</title>
     <property>/controls/rudder</property>
    </entry>
    <entry>
+    <enabled>true</enabled>
     <title>Ailerons</title>
     <property>/controls/aileron</property>
    </entry>
   </log>
  </logging>
 
-Each 'log' subbranch contains an optional 'filename' property
-(defaults to "fg_log.csv"), an optional 'delimiter' property (defaults
-to a comma), an optional 'interval-ms' property (defaults to 0, which
-logs every frame), and a series of 'entry' subbranches.  The
-'delimiter' property uses only the first character of the property
-value as the delimiter.  Note that the logger does no escaping, so you
-must choose a delimiter that will not appear in the property values
-(that's not hard, since most of the values are numeric, but watch for
-commas in the titles).
+Each 'log' subbranch contains a required 'enabled' property, an
+optional 'filename' property (defaults to "fg_log.csv"), an optional
+'delimiter' property (defaults to a comma), an optional 'interval-ms'
+property (defaults to 0, which logs every frame), and a series of
+'entry' subbranches.  The 'delimiter' property uses only the first
+character of the property value as the delimiter.  Note that the
+logger does no escaping, so you must choose a delimiter that will not
+appear in the property values (that's not hard, since most of the
+values are numeric, but watch for commas in the titles).
 
-Each 'entry' subbranch contains a 'property' property specifying the
-name of the property to be logged, and an optional 'title' property
-specifying the title to use in the CSV file (defaults to the full path
-of the property).  The elapsed time in milliseconds since the start of
-the simulation is always included as the first entry with the title
-"Time", so there is no need to include it explicitly.
+Each 'entry' subbranch contains a required 'enabled' property, a
+'property' property specifying the name of the property to be logged,
+and an optional 'title' property specifying the title to use in the
+CSV file (defaults to the full path of the property).  The elapsed
+time in milliseconds since the start of the simulation is always
+included as the first entry with the title "Time", so there is no need
+to include it explicitly.
 
 Here's a sample of the logging output for the above log:
 
@@ -79,4 +83,4 @@ The output log files are always relative to the current directory.
 
 --
 
-David Megginson, 2002-03-12
+David Megginson, last updated 2002-02-01
index e7d02526702850149ca21a044e3e59993484e9e9..da060caed2fb4480ffd5b0ddf1ac3c8c9a3d5a3e 100644 (file)
@@ -39,21 +39,54 @@ FGLogger::init ()
 
   vector<SGPropertyNode_ptr> children = logging->getChildren("log");
   for (unsigned int i = 0; i < children.size(); i++) {
+
+    SGPropertyNode * child = children[i];
+
+    if (!child->getBoolValue("enabled", false))
+        continue;
+
     _logs.push_back(Log());
     Log &log = _logs[_logs.size()-1];
-    SGPropertyNode * child = children[i];
-    string filename = child->getStringValue("filename", "fg_log.csv");
-    log.interval_ms = child->getLongValue("interval-ms", 0);
-    log.delimiter = child->getStringValue("delimiter", ",")[0];
+    
+    string filename = child->getStringValue("filename");
+    if (filename.size() == 0) {
+        filename = "fg_log.csv";
+        child->setStringValue("filename", filename.c_str());
+    }
+
+    string delimiter = child->getStringValue("delimiter");
+    if (delimiter.size() == 0) {
+        delimiter = ",";
+        child->setStringValue("delimiter", delimiter.c_str());
+    }
+        
+    log.interval_ms = child->getLongValue("interval-ms");
+    log.delimiter = delimiter.c_str()[0];
     log.output = new ofstream(filename.c_str());
     if (!log.output) {
       SG_LOG(SG_INPUT, SG_ALERT, "Cannot write log to " << filename);
       continue;
     }
+
+    //
+    // Process the individual entries (Time is automatic).
+    //
     vector<SGPropertyNode_ptr> entries = child->getChildren("entry");
     (*log.output) << "Time";
     for (unsigned int j = 0; j < entries.size(); j++) {
       SGPropertyNode * entry = entries[j];
+
+      //
+      // Set up defaults.
+      //
+      if (!entry->hasValue("property")) {
+          entry->setBoolValue("enabled", false);
+          continue;
+      }
+
+      if (!entry->getBoolValue("enabled"))
+          continue;
+
       SGPropertyNode * node =
        fgGetNode(entry->getStringValue("property"), true);
       log.nodes.push_back(node);
@@ -64,6 +97,13 @@ FGLogger::init ()
   }
 }
 
+void
+FGLogger::reinit ()
+{
+    _logs.clear();
+    init();
+}
+
 void
 FGLogger::bind ()
 {
index bf31bf4171e7593594a24f275f5267de231403d7..6b7d95291f219f2cee12f2a55279b503dff96efe 100644 (file)
@@ -40,6 +40,7 @@ public:
 
                                // Implementation of FGSubsystem
   virtual void init ();
+  virtual void reinit ();
   virtual void bind ();
   virtual void unbind ();
   virtual void update (double dt);