KB Article https://abilitylms.freshdesk.com/support/solutions/articles/33000213883-introduction-to-course-communication-logging-and-how-to-access-the-log introduces courseware logging. This article builds on that article and covers how to read the logs. This article covers logs for both AICC and SCORM courses. 


When training is taken, a log file is created for the history record created for the person + course. If 1000 history records, you have 1000 log files. Courseware tracking log data is always appended to the log file which means if you go into and out of the course several times, the same log file is updated, which means you have the ability to view the complete life cycle of what the course communicates to the LMS for each user. The data captured is incontestable in terms of what the LMS received. It is always processed BEFORE the LMS ever tries to update the database. 


The data captured is the raw data the course is sending so the logs can be intimidating techno-jargon at first, but the more you work with them the more it makes sense. In simple terms, when the course communicates it is logged. What the course communicates is structured text. Once you learn what to look for you can determine for yourself what the course is sending (or not). 


When you select a log file, it opens as a plain text file in your browser. 


Scroll to the bottom to see the most recent communication.


Because you are in the browser, you can use the browser find-on-page feature to quickly look for key phrase which shed a clue in what the course is sending. To access the find-on-page feature for most browsers hold the CTRL + F keys down which will open a search box. 


Here is a snippet of a SCORM API log


2018-07-30 14:15:53 UpdateLog: i1
----------------------------------------


API call detected: LMSSetValue | Param1="cmi.core.lesson_status" | Param2="passed"

API returns "true" to the SCO.



API call detected: LMSGetValue | Param1="cmi.core.lesson_status"

API returns "passed " to the SCO.



API call detected: LMSGetLastError

API returns "0" to the SCO.



API call detected: LMSSetValue | Param1="cmi.suspend_data" | Param2="{"completion":{"i":[],"m":[200160,200162],"o":[],"s":[],"t":[{"id":200160,"post":{"attempts":1,"weight":50,"points":50,"score":100}},{"id":200162,"post":{"attempts":1,"weight":50,"points":50,"score":100}}]},"contentVariables":{}}"

API returns "true" to the SCO.



API call detected: LMSSetValue | Param1="cmi.core.session_time" | Param2="0000:01:45.38"

API returns "true" to the SCO.



Here is a sample AICC log


Date & Time: 2018-08-03 15:47:35 Command = GETPARAM Session Id = MAXIT$_Art$A1$60391 Aicc data =  
error=0 error_text=successful version=2.0 aicc_data=[core] student_id=MAXIT student_name=Administrator, MaxIT lesson_location= Credit=C lesson_status=NA path= score=0 time=00:00:00 [core_lesson] [core_vendor]  


Date & Time: 2018-08-03 15:48:02 Command = PUTPARAM Session Id = MAXIT$_Art$A1$60391 Aicc data = [Core] Lesson_Location=index.html#/list/fZOgG2-1m0Wp7Up-8JmUnakQe-PsSVXK/preview Lesson_Status=P Score=100 Time=0000:00:27 [Comments]  [Objectives_Status]  [Student_Preferences] Audio=0 Language= Speed=100 Text=0 [Core_Lesson] {"quizItems":{},"progress":{"TvW_U7NqmFJb-0Gcpq4m39H-aLteMVSl":[1],"fZOgG2-1m0Wp7Up-8JmUnakQe-PsSVXK":[1]},"scores":{"fZOgG2-1m0Wp7Up-8JmUnakQe-PsSVXK":3},"attempts":{"fZOgG2-1m0Wp7Up-8JmUnakQe-PsSVXK":1},"score":100} 
2018-08-03 15:48:02 TrackHACP: ModuleHistory record 6687 updated
2018-08-03 15:48:02 UpdateHistory: History already completed = NO
2018-08-03 15:48:02 UpdateHistory: There are 1 ModuleHistory records
2018-08-03 15:48:02 UpdateHistory: There are 1 CourseModule records
2018-08-03 15:48:02 UpdateHistory: History record 60391
2018-08-03 15:48:02 UpdateHistory: History Status f
2018-08-03 15:48:02 UpdateHistory: History Completion Status P
2018-08-03 15:48:03 UpdateHistory: Checking for CourseWorkflow
error=0 error_text=successful  version=2.0 aicc_data= Occurred in: Aicc_Track_HACP.wml


Date & Time: 2018-08-03 15:48:03 Command = EXITAU Session Id = MAXIT$_Art$A1$60391 Aicc data =  
error=0 error_text=successful  version=2.0 aicc_data=



While very different logging signatures, by scrolling to the bottom you see the most recent data the course sent. As you become more familiar it will make more sense. 


The most common search is on a completion status. A course will send Incomplete, Failed, Pass or Complete when the course speaks to the LMS status information. The course designer or authoring tool chooses what statuses are used. 


Under Scorm, search on "Pass or "Complete . Include the double quote (") as this helps make the search more unique. 


Under AICC, search on the term =P or =C where P is for passed and c is for complete. 


Sometimes it is helpful to search on score. Under both AICC and Scorm, search on the term Score. 


Be sure to understand the relationship of score to the status in the course design or how the tool works. When publishing a course, you can define the passing score or the tool defaults its passing score to some value such as 80. Be aware that passing score is also defined in the LMS on course import. If you subsequently change the passing score or do not use scoring, and the course has been previously loaded into the LMS, the LMS will not know of those changes and you may need to update the course module record to a different passing score or blank the field out. For example, you publish and load a course with a passing (mastery) score of 80. You republish the course this time with a passing score of 70. The LMS does not know this and you need to edit the course module record, 


Under SCORM, there is something called "Suspend Data" and in AICC "Core Lesson". These log entries are essentially the same thing and contain user progress in the course. You might see the term passed or complete in these log entries, but that is local to a specific part of the course. While often the data is these log entries is rather ugly looking, when you look at it long enough you do see patterns. A useful trick is to compare these log entries against the log entries of someone that has completed the course. If they differ, it is a good clue there is some use case in the course for the user not tracking properly to be sorted out. For example, you may see a series of 1s and 0s where 1 = visited and 0 = not visited for the pages in the course. A 10 page course might look like this: 1111110000 where the 1st 6 pages were visited and the last 4 are not. Some courses expect you to visit every page, but if you are super-fast on the click you might break the system and see something like 11011111111 where all 10 pages were visited except the 3rd page. 


Finally, MaxIT supports the LMS and is responsible for processing the data or signals we get from the course. Under AICC and SCORM that communication from the course is standardized, but it does not mean the course is programmed or performs properly. Consider giving a loved one a cell phone, but if they choose not to use it, how will you know what is going on? Consider the loved one calling, so the good news is communication, but what if the communication is not understood or missing key parts to understand what is going on. Courseware is a lot like a cell phone. MaxIT can support the handling of the communication but we can't support some issue in the course or user environment that is preventing the course from communicating. 


As a rule of thumb.. 


1. Go to the Log tab on the history record. If you see URLs the course is communicating. If yo do not, there is something more fundamentally going wrong like a pop-up blocker enabled. 

2. Inspect the logs for a complete / pass status. If you do not see either, the course is not sending to the LMS a complete or pass status (even if the user experience says they are finished). 

3 You can further isolate the issue with the use of Fiddler Web Debug proxy. Please search the KB for an article on its use. 

4. If you see a Complete or Pass status in the log and the user is not marked Finished in LMS, contact MaxIT support with learner id, course id and attempt date

5. If you do not see a Complete or Pass, you have to sort out why the course is not sending the status. While MaxIT often get's engage at this point, and it really should be the course developer or vendor who should be engaged. They need to be told we do logging and they need to provide support to get the course to single to the LMS completion. 


One last thing on item 5, the content vendor will often load the course to their LMS or SCORM cloud and then claim it is not their problem if they see it working there. That is not an acceptable position to take as you must hold them accountable to showing you or providing tools that the course is posting a Pass or Complete status to our system. Our logging is authoritative and incontestable as to what the LMS is receiving.