 			client.set("login_count", user?.loginCount)
 			
 			callback null, project, privilegeLevel, WebsocketController.PROTOCOL_VERSION
+			logger.log {user_id, project_id, client_id: client.id}, "user joined project"
 			
 			# No need to block for setting the user as connected in the cursor tracking
 			ConnectedUsersManager.updateUserPosition project_id, client.id, user, null, () ->

						logger.error {err: error, project_id, doc_id, client_id: client.id, version: update.v}, "document was not available for update"
						client.disconnect()
					callback(error)

						escapedLines.push line
					client.join(doc_id)
					callback null, escapedLines, version, ops
					logger.log {user_id, project_id, doc_id, fromVersion, client_id: client.id}, "client joined doc"
					
	leaveDoc: (client, doc_id, callback = (error) ->) ->
		Utils.getClientAttributes client, ["project_id", "user_id"], (error, {project_id, user_id}) ->
