Rechercher des erreurs dans le log de vérification du CSM

C’est l’enfer de trouver les erreurs dans le log du CSM ! :angry:

Le fichier est en xml avec des CSS, on ne peut pas chercher directement le terme “Erreur” qui pourtant s’affiche à l’écran dans le navigateur. Il faut utiliser le terme “Problème” pour arriver à trouver les éléments rapidement.

Si cette info peut servir à d’autres pour pas perdre de temps à chercher dans un logs immense…

Bonjour Manuel;
il y’a une autre méthode ,ouvrir le fichier xml du log avec un éditeur de texte comme notepad++ et faire une recherche sur le terme “Erreur”.

Cela ne peut pas marcher car le terme erreur est une balise ! Il n’est même pas present dans le fichier de log… A la limite le terme “error”.

Capture d’écran 2020-04-22 à 09.26.33

Mais, comme le fichier s’ouvre automatiquement dans le navigateur, il est quand même plus simple de chercher directement via son moteur de recherche (sauf qu’il faut savoir quoi chercher puisqu’il ne cherche pas directement dans le fichier xml (les balises ne sont pas comprises) et pas non plus dans ce qu’il affiche !!!)

Manuel,
la recherche dans le navigateur sur les termes “erreur” et “avertissement” est parfaitement inefficace (ce sont des balises css, apparemment). j’ai pris l’habitude, une fois le rapport ouvert dans le navigateur, de l’imprimer en pdf vers Aperçu où je peux chercher ces termes “en clair”. Moins énervant que mouliner des ascenseurs en espérant ne rien rater parmi des centaines de pages.

Après ça dépend peut-être du navigateur, mais j’ai eu le cas encore hier: dans Safari, impossible de trouver le terme “erreur” qui s’affiche pourtant dans la page via l’option de recherche dans la page :face_with_symbols_over_mouth:
Je testerais le coup de l’impression en PDF la prochaine fois :smirk:

Hélas non, c’est toute la beauté des css : tu vois du texte s’afficher, mais il est “incherchable” quel que soit le navigateur.

Bonjour tous;
oui je suis désole c’est error que j’utilise dans notepad++.

For the data file, you could use a custom callback method to capture the errors and warnings, instead of relying on the XML log file. For instance, you could run a “verify” session on the server. Suppose you have a method verify_data_s that runs on the server.

ASSERT(METHOD Get attribute(Current method path;Attribute executed on server))

C_OBJECT($0;VERIFY_LOG)

VERIFY_LOG:=New object("errors";New collection;"warnings";New collection;"success";False)  //;"progress";0)

VERIFY_LOG.XLIFF:=New object(\
"unknown";Get localized string("verify_object_unknown");\
"record";Get localized string("verify_object_record");\
"index";Get localized string("verify_object_index");\
"structure";Get localized string("verify_object_structure");\
"data";Get localized string("verify_object_data"))

VERIFY CURRENT DATA FILE(Verify all;Do not create log file;"handle_verify_event")

OB REMOVE(VERIFY_LOG;"XLIFF")

$0:=VERIFY_LOG

handle_verify_event would look like

C_LONGINT($1;$event;$2)
C_TEXT($3)
C_LONGINT($4;$5;$0)

$event:=$1

C_OBJECT($XLIFF)

$XLIFF:=VERIFY_LOG.XLIFF

Case of 
	: ($event=verify_event_message)
		
		  //ignore progress
		
	: ($event=verify_event_complete)
		
		VERIFY_LOG.success:=True
		
	Else 
		
		$typeCode:=$2
		
		C_TEXT($type)
		
		Case of 
			: ($typeCode=verify_object_unknown)
				
				$type:=$XLIFF.unknown
				
			: ($typeCode=verify_object_record)
				
				$type:=$XLIFF.record
				
			: ($typeCode=verify_object_index)
				
				$type:=$XLIFF.index
				
			: ($typeCode=verify_object_structure)
				
				$type:=$XLIFF.structure
				
			Else 
				
				$type:=$XLIFF.data
				
		End case 
		
		C_COLLECTION($log)
		
		Case of 
			: ($event=verify_event_error)
				
				$log:=VERIFY_LOG.errors
				
			: ($event=verify_event_warning)
				
				$log:=VERIFY_LOG.warnings
				
			Else 
				$log:=New collection
		End case 
		
		$info:=$3
		$number:=$4
		
		$log.push(New object("type";$type;"number";$number;"info";$info))
		
End case 

The worker “verify_data” to invoke it would look like

C_OBJECT($1;$signal)

$signal:=$1

$status:=verify_data_s 

Use ($signal)
	
	$signal.success:=$status.success
	$signal.json_errors:=JSON Stringify($status.errors)
	$signal.json_warnings:=JSON Stringify($status.warnings)

End use 

$signal.trigger()

KILL WORKER

The proxy “verify” to invoke the worker would look like

C_OBJECT($1)
C_OBJECT($0;$status)

Use (This)
	This.signal:=New signal("execute on server")
End use 

$status:=New object("success";False)

C_OBJECT($signal)

$signal:=This.signal

CALL WORKER("verify_data";"verify_data";$signal)

$seconds:=1800

If ($signal.wait($seconds))
	
	$status.success:=$signal.success
	
	If ($status.success)
		
		C_COLLECTION($errors;$warnings)
		
		$status.errors:=JSON Parse($signal.json_errors;Is collection)
		$status.warnings:=JSON Parse($signal.json_warnings;Is collection)
		
	End if 
	
Else 
	$status.error:="timeout ("+String($seconds)+")"
End if 

Use (This)
	OB REMOVE(This;"signal")
End use 

$0:=$status

and the “class” object to run this method would look like

C_OBJECT($0;$EXPORT)

If (Storage.EXPORT=Null)
	Use (Storage)
		$EXPORT:=New shared object
		Storage.EXPORT:=$EXPORT
	End use 
Else 
	$EXPORT:=Storage.EXPORT
End if 

If ($EXPORT.verifyData=Null) 
	
	Use ($EXPORT)
		
		$EXPORT.verifyData:=Formula(verify )
		
	End use 
	
End if 

$0:=$EXPORT

Objects and collections are generally easier to handle than XML.

The pattern above is one that I use to encapsulate cooperative-preemptive, client-server bridges as member methods of a singleton component object. Only the “constructor” is exposed to the host, to keep the global namespace tidy. Callback methods (not used in the example) should be passed as formulae objects, not string method names. The advantage is that the method is tokenised and it does not have to be shared.

1 Like