Question [Outil]Le système de log nommé Log4NET

Plus d'informations
il y a 15 ans 1 mois #3784 par Laurent Dardenne
Projet Log4Posh .

Pour ceux et celles qui souhaitent utiliser un système de log évolué, vous pouvez consulter ce tutoriel d' introduction à Log4net .
Un des intérêts de ce Framework est de logger avec une seule instruction vers plusieurs sources (Console,fichier,eventlog,...)
Je suis en train de terminer la rédaction d'un tutoriel sur le sujet pour utilisation sous PowerShell.

En attendant un exemple simple utilisant une destination de type \"console colorisé \":
[code:1]
cd VotreChemin
$Log4NetHome=$PWD

# Charge la librairie log4net
[void][Reflection.Assembly]::LoadFile( \"$Log4NetHome\log4net.dll\"«»)

#Initialise le Framework log4net
[log4net.LogManager]::ResetConfiguration()

#Crée un appender de type console colorisée permettant de loguer dans la console
#Un appender est une destination, un dispositif sur lequel on écrit/envoie un résultat
$ColoredConsoleAppender = new-object log4net.Appender.ColoredConsoleAppender
$ColoredConsoleAppender.Name=\"LogColoredConsole\"

# Association niveau de log-couleur d'affichage
$ConfigColors=@(
@{Level=\"Warn\";Color=\"Yellow\"},
@{Level=\"Info\";Color=\"Cyan\"},
@{Level=\"Debug\";Color=\"Green\"},
@{Level=\"Error\";Color=\"Red\"}
)

#Configure le mappage des couleurs pour les niveaux de log
# C'est une factorisation de code
$ConfigColors|% {
$Colors = new-object log4net.Appender.ColoredConsoleAppender+LevelColors
$Colors.ForeColor=[log4net.Appender.ColoredConsoleAppender+Colors]::$($_.Color)
$Colors.Level=[log4net.Core.Level]::$($_.Level)
$ColoredConsoleAppender.AddMapping($Colors)
}

#Chaîne de formatage utilisant des tags prédéfinis dans Log4NET
$logpattern2 = \"%date{dd-MM-yyyy } %-5level - %message%newline\"

#Ajoute un layout utilisé pour formater le texte du message de log
#Un layout est une indication de mise en page d'une chaîne de caractères
$ColoredConsoleAppender.Layout=new-object log4net.Layout.PatternLayout($logpattern2)
$ColoredConsoleAppender.ActivateOptions()

#On configure le Framework
[log4net.Config.BasicConfigurator]::Configure($ColoredConsoleAppender)

#Un logger est l'objet de base du système de log, c'est à l'aide d'un logger qu'on écrit un message
$LogMain = [log4net.LogManager]::GetLogger(\"Main\"«»)

$LogMain.Info(\"Recherche des fichiers.\"«»)
$Files=gci c:\*.toto

If ($Files -eq $null)
{$LogMain.Warn(\"Aucun fichier\"«») }
else
{ $LogMain.Debug(\"{0} fichiers\" -F $Files.Count) }

$Sb={
Trap {$LogMain.Error(\"Except\",$error[0].Exception);continue}
$i=0
1/$i
}
&$Sb


#Ici on utilise un scriptblock, dans l'appel
$LogMain.Info(
(&{
If ($Files -eq $null)
{\"Aucun fichier\"}
else {\"{0} fichiers\" -F $Files.Count}
}) #Les parenthèses sont nécessaires pour l'appel du scriptblock, la méthode Info attend une string
) #$LogMain.Info

# Le niveau de log est-il Debug ?
if ($LogMain.IsDebugEnabled)
{
$DbgAppender = new-object log4net.Appender.OutputDebugStringAppender
$logpatternDbg=\"%-4timestamp [%thread] Logger:%logger - %message%newline\"
$DbgAppender.Layout=new-object log4net.Layout.PatternLayout($logpatternDbg)
#level = Debug
$DbgAppender.Threshold = [log4net.Core.Level]::«»Debug
$DbgAppender.ActivateOptions()
#Ajoute un appender au logger
# Le log est émit sur 2 destinations : la console et le debugger
# Si le debugger n'est pas activé l'instruction suivante ne provoquera pas d'erreur
$LogMain.Logger.AddAppender($DbgAppender)
&\"C:\dev\DebugView\Dbgview.exe\"
sleep 3
$LogMain.Debug(\"Message via log4NET\"«»)
}
[/code:1]
Notez qu'avec ce système les logs sont ordonnés, on peut ainsi afficher tout ou partie des logs insérés dans des scripts :
[code:1]
function TestLevel{
# régle : DEBUG < INFO < WARN < ERROR < FATAL
Write-host \"Level $($LogMain.Logger.Level)\" -for green
$LogMain.Debug(\"Level Debug.\"«»)
$LogMain.Info(\"Level Info.\"«»)
$LogMain.Warn(\"Level Warn.\"«»)
$LogMain.Error(\"Level Error.\"«»)
$LogMain.Fatal(\"Level Fatal.\"«»)
}

$LogMain.Logger.Level=[log4net.Core.Level]::Warn
#Les messages Debug et Info ne sont plus affichés
TestLevel
#Seul les messages Fatal seront affichés
$LogMain.Logger.Level=[log4net.Core.Level]::Fatal
TestLevel
$LogMain.Logger.Level=[log4net.Core.Level]::Error
TestLevel
#Plus aucun message n'est affiché
$LogMain.Logger.Level=[log4net.Core.Level]::Off
TestLevel
#Tous les messages sont affichés
$LogMain.Logger.Level=[log4net.Core.Level]::All
TestLevel

#Pour arrêter proprement le Framework de Log
# Shutdown
#[log4net.LogManager]::«»Shutdown()
[/code:1]

A suivre : ajout d'un appender Fichier<br><br>Message édité par: Laurent Dardenne, à: 24/02/09 12:02

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #3785 par Jacques Barathon
Ca a l'air intéressant cet assembly. Il ne reste plus qu'à créer un module pour faciliter son installation et permettre son utilisation via quelques fonctions un peu plus conviviales, et ce sera parfait ! :)

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #3786 par Laurent Dardenne
janel écrit:

Ca a l'air intéressant cet assembly.

Oui vraiment.
janel écrit:

permettre son utilisation via quelques fonctions un peu plus conviviales

J'étudie la question mais je manque un peu de recul pour faire des choix pertinents.
Il faut le pratiquer qq temps avant d'en comprendre toutes les fonctionnalités, enfin celles possibles sous PowerShell.
Le tutoriel fait une trentaine de pages et aborde les principaux objets de ce framework.<br><br>Message édité par: Laurent Dardenne, à: 21/01/09 16:07

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #3787 par Jacques Barathon
J'attends avec impatience le tutoriel pour pouvoir regarder ça de plus près !

De mon côté je me suis promis de tester la création et l'utilisation de modules dans les prochains jours. Je ferai un compte-rendu sur ce forum.

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #3791 par Laurent Dardenne
Je joins la dll, ça peut servir :lol:
Voyons comment ajouter un FileAppender afin d'écrire dans un fichier :
[code:1]
#Crée un appender fichier
#Les logs sont dirigés dans un fichier texte
$File = new-object log4net.Appender.FileAppender
$File.Name=\&quot;FichierDeLog\&quot;
$File.File=\&quot;$Pwd\PS-Log1.txt\&quot;
$logpattern = \&quot;%date %-5level - %message%newline\&quot;
$File.Layout=new-object log4net.Layout.PatternLayout($logpattern)
#On ajoute dans le fichier s'il existe
$File.AppendToFile=$True
$File.ActivateOptions()
$LogMain.Logger.AddAppender($File)
gc $File.File
$LogMain.Debug(\&quot;Ajout d'un appender fichier\&quot;«»)
gc $File.File
#Le fichier est verrouillé tant que l'appender $File est actif
#Mais il existe un mode de verrouillage moins restrictif.
[/code:1]
Ainsi pour chaque log nous avons 3 destinations : la console, le debugger s'il est actif et le fichier.
Pour visualiser le résultat vous pouvez utiliser le soft Bartail , cité dans le tuto indiqué précédemment, ou celui-ci basé sur ASP.NET : demo.l4ndash.com/

La pièce jointe log4net.zip est absente ou indisponible

<br><br>Message édité par: Laurent Dardenne, à: 22/01/09 13:25

Tutoriels PowerShell
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #3840 par Laurent Dardenne
Je vous joins le tutoriel, il me reste à finaliser les scripts encapsulant certaines méthodes de log4net.
Bonne lecture.

ps
Vous pouvez télécharger la documentation au format CHM ici : heywood.id.au/pub/log4net-help.chm

La pièce jointe Tutoriel_PS_Log4net.zip est absente ou indisponible

<br><br>Message édité par: Laurent Dardenne, à: 27/01/09 20:19

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.108 secondes
Propulsé par Kunena