Discussion Commanders log manual and data sample

I'm saddened to say but i'm not as brainy as you guys are with this journal. I imagined it would have been like for example "Commanders Log - Date&Time bla bla. I was at an ice body collecting materials, not much luck out here today. Maybe its just the weather." That sorta thing. I suppose this is for high level tier people that are just interested in the coding aspect as such?

Third party tools can do that kind of thing. This is just opening up a lot of the data needed for a lot of the info you want, and then you can add more stuff to it yourself to make it more human readable.
 
Nice!

I'm very much looking forward to what those talented individuals in the community will develop to utilise this data.
 
This is really cool. It looks like we'll be able to track a ton of different things, so I'm looking forward to what you guys can come up with :). Good luck.

Also, hire NPC crew? Interesting.
 
Last edited:
Greetings Commanders,

As you may have heard in the 3rd party developers discord or at Lavecon we have a new journal feed being added into game for 2.2 which developers can use to create a player Journal or “Commanders log”. What we would like is to give you information and support ahead of time to ensure that you are able to understand and utilise the functionality from day 1 of release.

Really good news. I have one question - player journal will be available in game? Or only data for third-party programs?
 
Very, very cool! Especially the ones for exploration – I like it.

How set in stone is the specification? Can we ask for additions/changes?

For example, apart from the ones stated above by others, is it possible to add the interdictor/interdictee CMDR names to the log for the interdiction events?

Can we add combat scan event, where the data would include the scanned CMDR name, ranks, ship and probably some other player's stats?
 
Way cool stuff! I loved the CMD Log that guy made for us and sooo very pleased we will have this now.

What I would love is to know what MODs I have so I can quickly chose if I want a mission or not. Plus we could get a real trading computer tool as that would be way cool too.

Good stuff people :)
 
Oh, wonderful! Really nice improvement awaits us.
But as always one part of in-game activity is completely omitted - planetary settlements. Data point scanned? HUB terminal accessed? POI object scanned?
 

Mu77ley

Volunteer Moderator
Some really great stuff in there, but one request I would make is to ditch most of the human readable times and just log UTC ctime datestamps for all events (as well as perhaps the user's timezone in the header information).

Also, due to the way duplicate times are used as keys in the JSON, some JSON libraries may not be able to parse all the entries correctly. Would probably be better to have each event as a JSON object in an array, for example:

Code:
{
	"Heading": {
		"localdatetime":"16-07-19-10:25",
		"timezone":"GMT Summer Time",
		"gmt_time":"09:25",
		"part":1,
		"gameversion":"2.2 (Trunk)",
		"build":"r113955 "
	},
	"Events": [
		{ 
			"time": "09:25:35",
			"event":"LoadGame",
			"Commander":"HRC1",
			"Ship":"Asp"
		},
		{
			"time":, "09:25:35",
			"event":"Rank",
			"Combat":0,
			"Trade":0,
			"Explore":1,
			"Empire":0,
			"Federation":0,
			"CQC":0
		}
	]
}

But, again, preferably with ctime timestamps. :)
 
Last edited:
A few things that occur to me looking at the event log
  • How will events while the game is not running be notified to the log? For example, if Support refund credits lost due to a bug, or if our ship location is changed during an Galaxy server migration prior to a new release? If this happens behind the scenes, our tools may get amounts wrong.
  • How is the use of consumables tracked, eg drones, torpedoes, missiles, FCBs, heat sinks and chaff?
  • How is damage, whether in combat, collisions, overheating or emergency drop, to be tracked? As an explorer, I'd like to know how often I cooked myself recently.
  • Wingman deaths?
  • CQC events such as match outcomes, k/d ratios, etc?

Will the journal version be incremented whenever the format changes? Could client and server versions also be given, so for example if a module's stats change in a new release, we know to use a stats database relating to the given version?
 

Mu77ley

Volunteer Moderator
As an example of the issue with duplicate keys, here's the output of the test log data as parsed in Perl using the (widley used) JSON::XS library:

Code:
{
  "09:25:35" => {
                  Combat     => 0,
                  CQC        => 0,
                  Empire     => 0,
                  event      => "Progress",
                  Explore    => 7,
                  Federation => 0,
                  Trade      => 0,
                },
  "09:25:43" => {
                  event      => "Location",
                  Faction    => "Timocani Gold Vision Limited",
                  StarPos    => [24.625, 10.75, -72.406],
                  StarSystem => "Timocani",
                },
  "09:28:21" => {
                  event      => "FSDJump",
                  Faction    => "Cerno Transport Interstellar",
                  JumpDist   => 20.012,
                  StarPos    => [30.063, 26.875, -82.938],
                  StarSystem => "Cerno",
                },
  "09:32:41" => {
                  Body => "Kanwar Enterprise",
                  event => "SupercruiseExit",
                  StarSystem => "Cerno",
                },
  "09:33:05" => {
                  event => "Docked",
                  Faction => "Cerno Transport Interstellar",
                  StationName => "Kanwar Enterprise",
                  StationType => "Coriolis",
                },
  "09:33:23" => { Amount => 4.937758, Cost => 248, event => "RefuelAll" },
  "09:34:28" => {
                  BaseValue  => 8783,
                  Bonus      => 1919,
                  Discovered => ["Timocani A", "Timocani A 2"],
                  event      => "SellExplorationData",
                  Systems    => ["Maia", "Merope", "Atlas", "Wolf 289", "Geawenki", "Timocani"],
                },
  "09:35:52" => {
                  BuyItem   => "int_engine_size5_class2",
                  BuyPrice  => 184310,
                  event     => "ModuleBuy",
                  SellItem  => "int_engine_size5_class1",
                  SellPrice => 19565,
                  Ship      => "asp",
                  Slot      => "MainEngines",
                },
  "09:36:07" => {
                  event => "ModuleSell",
                  SellItem => "int_cargorack_size1_class1",
                  SellPrice => 877,
                  Ship => "asp",
                  Slot => "Slot06_Size2",
                },
  "09:36:27" => {
                  BuyItem   => "int_stellarbodydiscoveryscanner_intermediate",
                  BuyPrice  => 492375,
                  event     => "ModuleBuy",
                  SellItem  => "int_stellarbodydiscoveryscanner_standard",
                  SellPrice => 0,
                  Ship      => "asp",
                  Slot      => "Slot07_Size2",
                },
  "09:36:44" => {
                  BuyItem  => "int_fuelscoop_size3_class5",
                  BuyPrice => 880381,
                  event    => "ModuleBuy",
                  Ship     => "asp",
                  Slot     => "Slot05_Size3",
                },
  "09:37:05" => {
                  BuyItem   => "int_cargorack_size3_class1",
                  BuyPrice  => 10299,
                  event     => "ModuleBuy",
                  SellItem  => "int_cargorack_size2_class1",
                  SellPrice => 2851,
                  Ship      => "asp",
                  Slot      => "Slot03_Size3",
                },
  "09:37:37" => {
                  BuyItem  => "int_buggybay_size2_class2",
                  BuyPrice => 21060,
                  event    => "ModuleBuy",
                  Ship     => "asp",
                  Slot     => "Slot06_Size2",
                },
  "09:41:47" => {
                  BuyPrice  => 538,
                  Count     => 8,
                  event     => "MarketBuy",
                  TotalCost => 4304,
                  Type      => "semiconductors",
                },
  "09:42:35" => {
                  Commodity => "MicroControllers",
                  Count     => 9,
                  event     => "MissionAccepted",
                  Faction   => "Cerno Transport Interstellar",
                  Name      => "Mission_Delivery",
                },
  "09:42:56" => {
                  event => "Undocked",
                  StationName => "Kanwar Enterprise",
                  StationType => "Coriolis",
                },
  "09:44:37" => {
                  event      => "FSDJump",
                  Faction    => "Enek Comms Co",
                  JumpDist   => 10.231,
                  StarPos    => [37.25, 32.719, -87.281],
                  StarSystem => "Enek",
                },
  "09:45:07" => { event => "FuelScoop", Scooped => 0.446264, Total => 32 },
  "09:47:32" => {
                  Body => "Carr Station",
                  event => "SupercruiseExit",
                  StarSystem => "Enek",
                },
  "09:48:07" => {
                  event => "Docked",
                  Faction => "Enek Comms Co",
                  StationName => "Carr Station",
                  StationType => "Coriolis",
                },
  "09:49:35" => {
                  AvgPricePaid => 538,
                  Count => 8,
                  event => "MarketSell",
                  SellPrice => 1375,
                  TotalSale => 11000,
                  Type => "semiconductors",
                },
  "Heading"  => {
                  build => "r113955 ",
                  gameversion => "2.2 (Trunk)",
                  gmt_time => "09:25",
                  localdatetime => "16-07-19-10:25",
                  part => 1,
                  timezone => "GMT Summer Time",
                },
} at test.pl line 40.

As you can see, only the last entry with the "09:25:35" key is included, as the others would have been overwritten.
 
Ability to launch fighters, recall ship from distant port at x cost and ability to 'see' mineral contents of planets very good. (I realize this is in development and may take a while)

However kindly add by SellExplorationData the listing of detailed surface scanned bodies and those values as well. I don't always agree with how you derive that value and i want to see it for myself
 
A few things that occur to me looking at the event log
  • How will events while the game is not running be notified to the log? For example, if Support refund credits lost due to a bug, or if our ship location is changed during an Galaxy server migration prior to a new release? If this happens behind the scenes, our tools may get amounts wrong.
  • How is the use of consumables tracked, eg drones, torpedoes, missiles, FCBs, heat sinks and chaff?
  • How is damage, whether in combat, collisions, overheating or emergency drop, to be tracked? As an explorer, I'd like to know how often I cooked myself recently.
  • Wingman deaths?
  • CQC events such as match outcomes, k/d ratios, etc?

Will the journal version be incremented whenever the format changes? Could client and server versions also be given, so for example if a module's stats change in a new release, we know to use a stats database relating to the given version?

Well, if such "micro-management" thing should be logged and so it significantly increase the file size and number of files per session, I will definitely hate you when importing it to the website. :D
 
First off: AWESOME! And thank you so much! This will really help 3rd-party app developers :)


Like to add my vote for ISO date-time stamps and timezone information (ditto for the standard netlog). People often play over midnight and various tools get the transitions wrong. Especially if it happens on a Summertime to Normaltime (or vv) night!

4.7 Touchdown:
Can we please get the planetary coordinates as well? eg:
"14:47:48": { "event":"Touchdown", "Location":[30.063,-82.938] }

6 Exploration
Could we get an additonal event when we destroy a rock with an SRV; eg:
"10:47:57": { "event":"DestroyedRock", "Type":"MetallicMeteorite", "Materials":{ "iron": 2, "sulphur": 1, "polonium": 1 } }
 
As an example of the issue with duplicate keys, here's the output of the test log data as parsed in Perl using the (widley used) JSON::XS library:

Code:
{
  "09:25:35" => {
                  Combat     => 0,
                  CQC        => 0,
                  Empire     => 0,
                  event      => "Progress",
                  Explore    => 7,
                  Federation => 0,
                  Trade      => 0,
                },
  "09:25:43" => {
                  event      => "Location",
                  Faction    => "Timocani Gold Vision Limited",
                  StarPos    => [24.625, 10.75, -72.406],
                  StarSystem => "Timocani",
                },
  "09:28:21" => {
                  event      => "FSDJump",
                  Faction    => "Cerno Transport Interstellar",
                  JumpDist   => 20.012,
                  StarPos    => [30.063, 26.875, -82.938],
                  StarSystem => "Cerno",
                },
  "09:32:41" => {
                  Body => "Kanwar Enterprise",
                  event => "SupercruiseExit",
                  StarSystem => "Cerno",
                },
  "09:33:05" => {
                  event => "Docked",
                  Faction => "Cerno Transport Interstellar",
                  StationName => "Kanwar Enterprise",
                  StationType => "Coriolis",
                },
  "09:33:23" => { Amount => 4.937758, Cost => 248, event => "RefuelAll" },
  "09:34:28" => {
                  BaseValue  => 8783,
                  Bonus      => 1919,
                  Discovered => ["Timocani A", "Timocani A 2"],
                  event      => "SellExplorationData",
                  Systems    => ["Maia", "Merope", "Atlas", "Wolf 289", "Geawenki", "Timocani"],
                },
  "09:35:52" => {
                  BuyItem   => "int_engine_size5_class2",
                  BuyPrice  => 184310,
                  event     => "ModuleBuy",
                  SellItem  => "int_engine_size5_class1",
                  SellPrice => 19565,
                  Ship      => "asp",
                  Slot      => "MainEngines",
                },
  "09:36:07" => {
                  event => "ModuleSell",
                  SellItem => "int_cargorack_size1_class1",
                  SellPrice => 877,
                  Ship => "asp",
                  Slot => "Slot06_Size2",
                },
  "09:36:27" => {
                  BuyItem   => "int_stellarbodydiscoveryscanner_intermediate",
                  BuyPrice  => 492375,
                  event     => "ModuleBuy",
                  SellItem  => "int_stellarbodydiscoveryscanner_standard",
                  SellPrice => 0,
                  Ship      => "asp",
                  Slot      => "Slot07_Size2",
                },
  "09:36:44" => {
                  BuyItem  => "int_fuelscoop_size3_class5",
                  BuyPrice => 880381,
                  event    => "ModuleBuy",
                  Ship     => "asp",
                  Slot     => "Slot05_Size3",
                },
  "09:37:05" => {
                  BuyItem   => "int_cargorack_size3_class1",
                  BuyPrice  => 10299,
                  event     => "ModuleBuy",
                  SellItem  => "int_cargorack_size2_class1",
                  SellPrice => 2851,
                  Ship      => "asp",
                  Slot      => "Slot03_Size3",
                },
  "09:37:37" => {
                  BuyItem  => "int_buggybay_size2_class2",
                  BuyPrice => 21060,
                  event    => "ModuleBuy",
                  Ship     => "asp",
                  Slot     => "Slot06_Size2",
                },
  "09:41:47" => {
                  BuyPrice  => 538,
                  Count     => 8,
                  event     => "MarketBuy",
                  TotalCost => 4304,
                  Type      => "semiconductors",
                },
  "09:42:35" => {
                  Commodity => "MicroControllers",
                  Count     => 9,
                  event     => "MissionAccepted",
                  Faction   => "Cerno Transport Interstellar",
                  Name      => "Mission_Delivery",
                },
  "09:42:56" => {
                  event => "Undocked",
                  StationName => "Kanwar Enterprise",
                  StationType => "Coriolis",
                },
  "09:44:37" => {
                  event      => "FSDJump",
                  Faction    => "Enek Comms Co",
                  JumpDist   => 10.231,
                  StarPos    => [37.25, 32.719, -87.281],
                  StarSystem => "Enek",
                },
  "09:45:07" => { event => "FuelScoop", Scooped => 0.446264, Total => 32 },
  "09:47:32" => {
                  Body => "Carr Station",
                  event => "SupercruiseExit",
                  StarSystem => "Enek",
                },
  "09:48:07" => {
                  event => "Docked",
                  Faction => "Enek Comms Co",
                  StationName => "Carr Station",
                  StationType => "Coriolis",
                },
  "09:49:35" => {
                  AvgPricePaid => 538,
                  Count => 8,
                  event => "MarketSell",
                  SellPrice => 1375,
                  TotalSale => 11000,
                  Type => "semiconductors",
                },
  "Heading"  => {
                  build => "r113955 ",
                  gameversion => "2.2 (Trunk)",
                  gmt_time => "09:25",
                  localdatetime => "16-07-19-10:25",
                  part => 1,
                  timezone => "GMT Summer Time",
                },
} at test.pl line 40.

As you can see, only the last entry with the "09:25:35" key is included, as the others would have been overwritten.

Please see my earlier comment, the time should be in ISO 8601 format (e.g. 2012-04-23T18:25:43.511Z). And using the time as a key is bad form, since javascript object keys have to be sorted to come out in order. The events should be an object each in an array to reflect order, and the timestamp should be inside them.


Here's how I'd do it, assuming the header has to be printed in every new file:

Code:
{
	"heading": {
		"timestamp": "2016-07-20T09:25:35Z",
		"part": 1,
		"gameversion": "2.2 (Trunk)",
		"build": "r113955 "
	},
	"events": [{
		"timestamp": "2016-07-20T09:25:35Z",
		"event": "LoadGame",
		"Commander": "HRC1",
		"Ship": "Asp"
	},
	{
		"timestamp": "2016-07-20T09:25:35Z",
		"event": "Rank",
		"Combat": 0,
		"Trade": 0,
		"Explore": 1,
		"Empire": 0,
		"Federation": 0,
		"CQC": 0
	},
	{
		"timestamp": "2016-07-20T09:25:35Z",
		"event": "Progress",
		"Combat": 0,
		"Trade": 0,
		"Explore": 7,
		"Empire": 0,
		"Federation": 0,
		"CQC": 0
	},
	{
		"timestamp": "2016-07-20T09:25:43Z",
		"event": "Location",
		"StarSystem": "Timocani",
		"StarPos": [24.625,
		10.750,
		-72.406],
		"Faction": "Timocani Gold Vision Limited"
	},
	{
		"timestamp": "2016-07-20T09:28:21Z",
		"event": "FSDJump",
		"StarSystem": "Cerno",
		"StarPos": [30.063,
		26.875,
		-82.938],
		"JumpDist": 20.012,
		"Faction": "Cerno Transport Interstellar"
	},
	{
		"timestamp": "2016-07-20T09:32:41Z",
		"event": "SupercruiseExit",
		"StarSystem": "Cerno",
		"Body": "Kanwar Enterprise"
	},
	{
		"timestamp": "2016-07-20T09:33:05Z",
		"event": "Docked",
		"StationName": "Kanwar Enterprise",
		"StationType": "Coriolis",
		"Faction": "Cerno Transport Interstellar"
	},
	{
		"timestamp": "2016-07-20T09:33:23Z",
		"event": "RefuelAll",
		"Cost": 248,
		"Amount": 4.937758
	},
	{
		"timestamp": "2016-07-20T09:34:28Z",
		"event": "SellExplorationData",
		"Systems": ["Maia",
		"Merope",
		"Atlas",
		"Wolf 289",
		"Geawenki",
		"Timocani"],
		"Discovered": ["Timocani A",
		"Timocani A 2"],
		"BaseValue": 8783,
		"Bonus": 1919
	},
	{
		"timestamp": "2016-07-20T09:35:52Z",
		"event": "ModuleBuy",
		"Slot": "MainEngines",
		"SellItem": "int_engine_size5_class1",
		"SellPrice": 19565,
		"BuyItem": "int_engine_size5_class2",
		"BuyPrice": 184310,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:36:07Z",
		"event": "ModuleSell",
		"Slot": "Slot06_Size2",
		"SellItem": "int_cargorack_size1_class1",
		"SellPrice": 877,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:36:27Z",
		"event": "ModuleBuy",
		"Slot": "Slot07_Size2",
		"SellItem": "int_stellarbodydiscoveryscanner_standard",
		"SellPrice": 0,
		"BuyItem": "int_stellarbodydiscoveryscanner_intermediate",
		"BuyPrice": 492375,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:36:44Z",
		"event": "ModuleBuy",
		"Slot": "Slot05_Size3",
		"BuyItem": "int_fuelscoop_size3_class5",
		"BuyPrice": 880381,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:37:05Z",
		"event": "ModuleBuy",
		"Slot": "Slot03_Size3",
		"SellItem": "int_cargorack_size2_class1",
		"SellPrice": 2851,
		"BuyItem": "int_cargorack_size3_class1",
		"BuyPrice": 10299,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:37:37Z",
		"event": "ModuleBuy",
		"Slot": "Slot06_Size2",
		"BuyItem": "int_buggybay_size2_class2",
		"BuyPrice": 21060,
		"Ship": "asp"
	},
	{
		"timestamp": "2016-07-20T09:41:47Z",
		"event": "MarketBuy",
		"Type": "semiconductors",
		"Count": 8,
		"BuyPrice": 538,
		"TotalCost": 4304
	},
	{
		"timestamp": "2016-07-20T09:42:35Z",
		"event": "MissionAccepted",
		"Faction": "Cerno Transport Interstellar",
		"Name": "Mission_Delivery",
		"Commodity": "MicroControllers",
		"Count": 9
	},
	{
		"timestamp": "2016-07-20T09:42:56Z",
		"event": "Undocked",
		"StationName": "Kanwar Enterprise",
		"StationType": "Coriolis"
	},
	{
		"timestamp": "2016-07-20T09:44:37Z",
		"event": "FSDJump",
		"StarSystem": "Enek",
		"StarPos": [37.250,
		32.719,
		-87.281],
		"JumpDist": 10.231,
		"Faction": "Enek Comms Co"
	},
	{
		"timestamp": "2016-07-20T09:45:07Z",
		"event": "FuelScoop",
		"Scooped": 0.446264,
		"Total": 32.000000
	},
	{
		"timestamp": "2016-07-20T09:47:32Z",
		"event": "SupercruiseExit",
		"StarSystem": "Enek",
		"Body": "Carr Station"
	},
	{
		"timestamp": "2016-07-20T09:48:07Z",
		"event": "Docked",
		"StationName": "Carr Station",
		"StationType": "Coriolis",
		"Faction": "Enek Comms Co"
	},
	{
		"timestamp": "2016-07-20T09:49:35Z",
		"event": "MarketSell",
		"Type": "semiconductors",
		"Count": 8,
		"SellPrice": 1375,
		"TotalSale": 11000,
		"AvgPricePaid": 538
	}]
}
 
Last edited:
On 5.3 and 5.4, is the death data written to log files for all players in the instance, E.g A fight breaks out in a station and your docked, two players are killed. Is the death data for those kills written to the docked cmdrs log file?
 
Last edited:
Top Bottom