log-level

Une définition du Jargon Français.
Aller à : Navigation, rechercher

Dr en2.png nom masculin. En français « niveau d'importance » assigné aux messages individuels dans le journal (le log) crée pendant l'exécution d'un logiciel. Ces niveaux servent à filtrer et à prioriser ces messages, selon le besoin de l'usager. Leurs désignations peuvent varier en fonction du logger choisi par le développeur, mais les niveaux suivants sont courants car inspirés de ceux de syslog (qu'il nomme priorités) :

debug
messages qui sont normalement réservés aux développeurs du logiciel et servent à vérifier le bon fonctionnement du dernier ou à faciliter la maintenance et la correction de bugs. L'information transmise concerne souvent des détails dans le code source et ne s'explique pas nécessairement à l'utilisateur final.
info
messages qui servent à informer l'usager, dans le sens le plus général, sur l'état des donnés actuellement traitées ou la situation précise du logiciel.
notice:le logiciel détecte un état potentiellement anormal ou un problème mineur.
warning (“warn”)
ces messages se placent entre les deux mondes. En tout cas, l'usager doit prendre en compte la possibilité d'un risque ou du fait que le logiciel détecte un état anormal. Pour le développeur un tel message peut indiquer qu'il considère qu'il appartient à l'utilisateur final de décider de traiter le problème.
error
l'état actuel des donnés traitées ou du logiciel est invalide. Le logiciel ne peut pas conclure une action. Le texte du message doit cependant clarifier s'il s'agit d'une erreur de fonctionnement ou plutôt la conséquence d'une fausse manœuvre ou d'une erreur de saisie. Si le programme est interactif, c'est à dire dépend des commandes par l'utilisateur, il peut continuer à accepter des entrées, traiter des données et produire des résultats corrects.
fatal
Comme error, mais sans perspective d'une reprise. Le logiciel s'arrête obligatoirement à cause d'un problème sérieux, soit à l'intérieur du programme, soit dans son environnement ou à cause d'un défaut du matériel. Une erreur de ce type est parfois déclenchée par le programme qui détecte l'erreur, souvent c'est le noyau. Ce niveau est parfois détaillé en EMERGency (urgence absolue, l'ensemble du système est inutilisable), ALERT (intervention urgente nécessaire) et CRITical (situation critique)

Les logiciels actifs envoient parfois beaucoup de messages au logiciel gérant les logs. Un paramètre de ce dernier lui impose le niveau d'importance minimal ceux qu'il notera dans le journal, tous les autres seront perdus. Par exemple, un développeur qui souhaite suivre de façon détaillée l'activité d'un programme demandera les messages du niveau debug. Il verra automatiquement aussi tous ceux de plus grand importance (info, warning, error et fatal). Par contre, pour un logiciel qui est exécuté quotidiennement en mode « démon », les niveaux debug et info ne sont que rarement demandés donc on choisit alors le niveau warning afin de garder que les messages sur les niveaux warning, error et fatal.

Idéalement les messages sont individuellement préfixés avec la désignation de leur niveau d'importance. Extrait d'un journal avec messages des niveaux debug et info :

user@machine: cremefraiche.rb ~/Mail/[fichier]
I, [2016-01-31T22:58:16.698669 #2975]  '''INFO''' -- : init config
I, [2016-01-31T22:58:16.698828 #2975]  '''INFO''' -- : configuration will be read from .cremefraiche/config
CremeFraiche: '''DEBUG''' 22-58-17: args.flatten.empty? false
CremeFraiche: '''DEBUG''' 22-58-17: processing 1 files
CremeFraiche: '''DEBUG''' 22-58-17: path: #<Dir:0x000000014fde30>, #<Dir:0x000000014fdcf0>, #<Dir:0x000000014fdc00>, #<Dir:0x000000014fda48>, #<Dir:0x000000014fd930>, #<Dir:0x000000014fd818>
CremeFraiche: '''DEBUG''' 22-58-17: found the following external programs: {"pdftk"=>true}
CremeFraiche: '''DEBUG''' 22-58-17: args.flatten.empty? true
CremeFraiche: '''DEBUG''' 22-58-17: printing usage-message

Extrait du code (en Ruby), avec l'appel du logger pour les deux derniers messages de l'exemple ci-dessus:

	if RUBY_PLATFORM.include?('linux')
			@cur_system =  `uname -a`
		else
			@cur_system = RUBY_PLATFORM
		end
		@log.debug('args.flatten.empty? ' << args.flatten.empty?.to_s)
		tfile = nil
		if(args && args.flatten.empty? )
			@log.debug('printing usage-message')
			puts usage
		elsif args[0] && 'user-conf' == args[0].chomp
			@log.debug('handling user-configuration')
			handle_user_conf
		else 
			if args.length == 1 && args[0] == '-'
				args.compact!