Question [Outil]Le système de log nommé Log4NET
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6290
- Remerciements reçus 67
il y a 14 ans 8 mois #3784
par Laurent Dardenne
Tutoriels PowerShell
[Outil]Le système de log nommé Log4NET a été créé 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
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.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 14 ans 8 mois #3785
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:[Outil]Le système de log nommé Log4NET
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

Janel
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6290
- Remerciements reçus 67
il y a 14 ans 8 mois #3786
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
janel écrit:
janel écrit:
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
Oui vraiment.Ca a l'air intéressant cet assembly.
janel écrit:
J'étudie la question mais je manque un peu de recul pour faire des choix pertinents.permettre son utilisation via quelques fonctions un peu plus conviviales
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.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 14 ans 8 mois #3787
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:[Outil]Le système de log nommé Log4NET
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
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6290
- Remerciements reçus 67
il y a 14 ans 8 mois #3791
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Je joins la dll, ça peut servir 
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=\"FichierDeLog\"
$File.File=\"$Pwd\PS-Log1.txt\"
$logpattern = \"%date %-5level - %message%newline\"
$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(\"Ajout d'un appender fichier\"«»)
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/
<br><br>Message édité par: Laurent Dardenne, à: 22/01/09 13:25

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=\"FichierDeLog\"
$File.File=\"$Pwd\PS-Log1.txt\"
$logpattern = \"%date %-5level - %message%newline\"
$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(\"Ajout d'un appender fichier\"«»)
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
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6290
- Remerciements reçus 67
il y a 14 ans 7 mois #3840
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
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
<br><br>Message édité par: Laurent Dardenne, à: 27/01/09 20:19
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
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.062 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Outil]Le système de log nommé Log4NET