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 7 mois #4057
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Une démo sur l'appender SMTP :
[code:1]
#!!!!!!! Change the email addresses !!!!!!!!!!!!!
$From=\"Log4Posh@Gmail.fr\"
$To=\"Administrators@Gmail.US\"
#or $To=\"Administrators@Gmail.US,user2.@Yahoo.us\"
$SMTPHost=\"smtp.google.com\"
#Configuration à minima
New-LogSmtpAppender -L \"%date %-5level - %message%newline\" `
-Name \"Mailer\" `
-Evaluator (New-LogLevelEvaluator \"Fatal\"«») `
-From $From `
-To $To `
-SMTPHost $SMTPHost `
-Subject \"[$env:COMPUTERNAME]Fatal Error in $($MyInvocation.InvocationName) script.\"|`
Enable-LogAppender|`
Set-LogBasicConfigurator
$LogMail = Get-LogLogger \"SendMail\"
#Send 1 message, Now
$LogMail.Fatal(\"Fatal error detected.\"«»)
#Title : [MyServername]Fatal Error in Demo11.ps1 script.
#body : 2009-02-15 10:09:03,515 FATAL - Fatal error detected.
#Déclare une propriété active globale
. .\PackageDebugTools.ps1
Set-LogActiveProperty \"CallStack\" { $(ParseStack $(Get-CallStack)) }
$DatePattern=(Get-UICulture).DateTimeFormat.ShortDatePattern -Replace \"/\",\"-\"
$LogPattern = \"[%P{log4net:HostName}(Logger=%logger)]-%date{$DatePattern} %-5level %property{CallStack} - %message%newline\"
Update-LogLayout $LogMail.Logger.Parent.Appenders[0] $LogPattern
$Subject= \"[$env:COMPUTERNAME]Fatal Error in function `$(`$MyInvocation.InvocationName).\"
Function Une {
Deux }
Function Deux {
$LogMail.Logger.Parent.Appenders[0].Subject= $ExecutionContext.InvokeCommand.ExpandString($Subject)
$LogMail.Fatal(\"Dans la fonction Deux\"«»)
#Title : [MyServername]Fatal Error in function Deux.
#body : [MyServername(Logger=SendMail)]-15-02-2009 FATAL une:«»Deux - Dans la fonction Deux
}
Une
[/code:1]
Ensuite, en utilisant un objet Renderer adapté, on peut envoyer un compte rendu de l'erreur :
[code:1]
$LogMail.Logger.Parent.Appenders[0].Subject=\"[$env:COMPUTERNAME]Fatal Error in $($MyInvocation.InvocationName) script.\"
$RndrPath=$Pwd
# charge la librairie PSLog4NET (Renderer)
[Reflection.Assembly]::LoadFrom(\"$RndrPath\PSLog4NET.dll\"«»)
$PSRenderer = new-object PSLog4NET.PSObjectRenderer
$Repository = [log4net.LogManager]::GetRepository()
$Repository.RendererMap.Put([PSLog4NET.PSObjectRenderer],(new-object PSLog4NET.PSObjectRenderer) )
#. .\PackageDebugTools.ps1
$PSRenderer|Add-Member -Force -MemberType ScriptMethod ToString { rver|Out-String }
#Déclenche une erreur
.\Demo11-1Error.ps1
[/code:1]
Le script déclenchant l'erreur :
[code:1]
#Demo11-1Error.ps1
#Génére une erreur
#Envoi un compte rendu détaillé d'une erreur PowerShell
trap {$LogMail.Fatal($PSRenderer)}
$Error.clear()
$i=0
1/$i
[/code:1]
Le résultat dans le mail reçu :
[code:1]
[PCTest(Logger=SendMail)]-15-02-2009 FATAL .\Demo11-1Error.ps1 -
Exception : System.Management.Automation.RuntimeException: Tentative de division par zéro. ---> System.Divi
deByZeroException: Tentative de division par zéro.
à System.Management.Automation.ParserOps.polyDiv...
...
TargetObject :
CategoryInfo : NonSpécifié : (:«») [], RuntimeException
FullyQualifiedErrorId : RuntimeException
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
MyCommand :
ScriptLineNumber : 7
OffsetInLine : 6
ScriptName : G:\Temp\Packages\Demo\Demo11-1Error.ps1
Line : 1/$i
PositionMessage :
Au niveau de G:\Temp\Packages\Demo\Demo11-1Error.ps1 : 7 Caractère : 6
+ 1/$ <<<< i
InvocationName : /
PipelineLength : 0
PipelinePosition : 0
...
[/code:1]
On connait donc la machine émettrice, le script fautif et la ligne en erreur. Cool
Pas mal pour du scripting
<br><br>Message édité par: Laurent Dardenne, à: 16/02/09 18:35
[code:1]
#!!!!!!! Change the email addresses !!!!!!!!!!!!!
$From=\"Log4Posh@Gmail.fr\"
$To=\"Administrators@Gmail.US\"
#or $To=\"Administrators@Gmail.US,user2.@Yahoo.us\"
$SMTPHost=\"smtp.google.com\"
#Configuration à minima
New-LogSmtpAppender -L \"%date %-5level - %message%newline\" `
-Name \"Mailer\" `
-Evaluator (New-LogLevelEvaluator \"Fatal\"«») `
-From $From `
-To $To `
-SMTPHost $SMTPHost `
-Subject \"[$env:COMPUTERNAME]Fatal Error in $($MyInvocation.InvocationName) script.\"|`
Enable-LogAppender|`
Set-LogBasicConfigurator
$LogMail = Get-LogLogger \"SendMail\"
#Send 1 message, Now
$LogMail.Fatal(\"Fatal error detected.\"«»)
#Title : [MyServername]Fatal Error in Demo11.ps1 script.
#body : 2009-02-15 10:09:03,515 FATAL - Fatal error detected.
#Déclare une propriété active globale
. .\PackageDebugTools.ps1
Set-LogActiveProperty \"CallStack\" { $(ParseStack $(Get-CallStack)) }
$DatePattern=(Get-UICulture).DateTimeFormat.ShortDatePattern -Replace \"/\",\"-\"
$LogPattern = \"[%P{log4net:HostName}(Logger=%logger)]-%date{$DatePattern} %-5level %property{CallStack} - %message%newline\"
Update-LogLayout $LogMail.Logger.Parent.Appenders[0] $LogPattern
$Subject= \"[$env:COMPUTERNAME]Fatal Error in function `$(`$MyInvocation.InvocationName).\"
Function Une {
Deux }
Function Deux {
$LogMail.Logger.Parent.Appenders[0].Subject= $ExecutionContext.InvokeCommand.ExpandString($Subject)
$LogMail.Fatal(\"Dans la fonction Deux\"«»)
#Title : [MyServername]Fatal Error in function Deux.
#body : [MyServername(Logger=SendMail)]-15-02-2009 FATAL une:«»Deux - Dans la fonction Deux
}
Une
[/code:1]
Ensuite, en utilisant un objet Renderer adapté, on peut envoyer un compte rendu de l'erreur :
[code:1]
$LogMail.Logger.Parent.Appenders[0].Subject=\"[$env:COMPUTERNAME]Fatal Error in $($MyInvocation.InvocationName) script.\"
$RndrPath=$Pwd
# charge la librairie PSLog4NET (Renderer)
[Reflection.Assembly]::LoadFrom(\"$RndrPath\PSLog4NET.dll\"«»)
$PSRenderer = new-object PSLog4NET.PSObjectRenderer
$Repository = [log4net.LogManager]::GetRepository()
$Repository.RendererMap.Put([PSLog4NET.PSObjectRenderer],(new-object PSLog4NET.PSObjectRenderer) )
#. .\PackageDebugTools.ps1
$PSRenderer|Add-Member -Force -MemberType ScriptMethod ToString { rver|Out-String }
#Déclenche une erreur
.\Demo11-1Error.ps1
[/code:1]
Le script déclenchant l'erreur :
[code:1]
#Demo11-1Error.ps1
#Génére une erreur
#Envoi un compte rendu détaillé d'une erreur PowerShell
trap {$LogMail.Fatal($PSRenderer)}
$Error.clear()
$i=0
1/$i
[/code:1]
Le résultat dans le mail reçu :
[code:1]
[PCTest(Logger=SendMail)]-15-02-2009 FATAL .\Demo11-1Error.ps1 -
Exception : System.Management.Automation.RuntimeException: Tentative de division par zéro. ---> System.Divi
deByZeroException: Tentative de division par zéro.
à System.Management.Automation.ParserOps.polyDiv...
...
TargetObject :
CategoryInfo : NonSpécifié : (:«») [], RuntimeException
FullyQualifiedErrorId : RuntimeException
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
MyCommand :
ScriptLineNumber : 7
OffsetInLine : 6
ScriptName : G:\Temp\Packages\Demo\Demo11-1Error.ps1
Line : 1/$i
PositionMessage :
Au niveau de G:\Temp\Packages\Demo\Demo11-1Error.ps1 : 7 Caractère : 6
+ 1/$ <<<< i
InvocationName : /
PipelineLength : 0
PipelinePosition : 0
...
[/code:1]
On connait donc la machine émettrice, le script fautif et la ligne en erreur. Cool

Pas mal pour du scripting

Tutoriels PowerShell
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 6 mois #4182
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Les scripts seront mis à jour sur Codeplex
Log4Posh
.
Bon logs.
Bon logs.
Tutoriels PowerShell
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 6 mois #4281
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Correction d'un bug dans le fonction New-LogStringFilter :
[code:1]function global:New-LogStringFilter([log4net.Appender.AppenderSkeleton] $Appender,
[String] $Regex,
[String] $MatchStr,
[Switch] $Inverse){
#Filtre sur une chaîne ou une expression régulière ou les deux.
begin
{
function NewStringFilter([log4net.Appender.AppenderSkeleton] $Appender=$(Throw $LogDatas.Get(\"NecessaryParameter\",\"New-LogStringFilter\",\"Appender\"«»)),
[String] $Regex,
[String] $MatchStr,
[Switch] $Inverse){
$SbProperties={
$Filter.RegexToMatch =$RegEx
$Filter.StringToMatch=$MatchStr
#Inverse la condition du test du filtre
if ($Inverse) {$Filter.AcceptOnMatch=$False }
}
Write-Debug \"$($SbProperties)\"
$Filter=New-LogFilter log4net.Filter.StringMatchFilter $SbProperties
$Filter
}
}
process
{
if ($_)
{
Write-Debug (\"Process : {0}\" -F $MyInvocation.InvocationName)
NewStringFilter -Appender $_ -Reg $Regex -MatchStr $MatchStr -Inverse:$Inverse
#On émet un filtre
}
}
end
{
if ($Appender)
{
Write-Debug (\"End : {0}\" -F $MyInvocation.InvocationName)
NewStringFilter -Appender $Appender -Reg $Regex -MatchStr $MatchStr -Inverse:$Inverse
}
}
}[/code:1]
Ah le copier-coller !<br><br>Message édité par: Laurent Dardenne, à: 9/03/09 18:47
[code:1]function global:New-LogStringFilter([log4net.Appender.AppenderSkeleton] $Appender,
[String] $Regex,
[String] $MatchStr,
[Switch] $Inverse){
#Filtre sur une chaîne ou une expression régulière ou les deux.
begin
{
function NewStringFilter([log4net.Appender.AppenderSkeleton] $Appender=$(Throw $LogDatas.Get(\"NecessaryParameter\",\"New-LogStringFilter\",\"Appender\"«»)),
[String] $Regex,
[String] $MatchStr,
[Switch] $Inverse){
$SbProperties={
$Filter.RegexToMatch =$RegEx
$Filter.StringToMatch=$MatchStr
#Inverse la condition du test du filtre
if ($Inverse) {$Filter.AcceptOnMatch=$False }
}
Write-Debug \"$($SbProperties)\"
$Filter=New-LogFilter log4net.Filter.StringMatchFilter $SbProperties
$Filter
}
}
process
{
if ($_)
{
Write-Debug (\"Process : {0}\" -F $MyInvocation.InvocationName)
NewStringFilter -Appender $_ -Reg $Regex -MatchStr $MatchStr -Inverse:$Inverse
#On émet un filtre
}
}
end
{
if ($Appender)
{
Write-Debug (\"End : {0}\" -F $MyInvocation.InvocationName)
NewStringFilter -Appender $Appender -Reg $Regex -MatchStr $MatchStr -Inverse:$Inverse
}
}
}[/code:1]
Ah le copier-coller !<br><br>Message édité par: Laurent Dardenne, à: 9/03/09 18:47
Tutoriels PowerShell
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 9 ans 10 mois #16382
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Un version simplifiée basée sur un fichier de configuration XML. Voir le projet de démo.
[edit]
Une refonte du module:
psionic.codeplex.com/wikipage?title=Log4...Title=French-version
Message édité par: Laurent Dardenne, à: 26/05/14 20:11
La pièce jointe Log4Posh-6be8f5a7d2ea63707eb11071445d2bff.zip est absente ou indisponible
[edit]
Une refonte du module:
psionic.codeplex.com/wikipage?title=Log4...Title=French-version
Message édité par: Laurent Dardenne, à: 26/05/14 20:11
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 6 ans 11 mois #22332
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Tutoriels PowerShell
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 6 ans 6 mois #23283
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Outil]Le système de log nommé Log4NET
Une nouvelle version 2.1
.
Support de .NET Core 1.0 / .NET Standard 1.3
Pas encore testé sous NanoServer ni sous Linux et autre.
Support de .NET Core 1.0 / .NET Standard 1.3
Pas encore testé sous NanoServer ni sous Linux et autre.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.067 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Outil]Le système de log nommé Log4NET