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

Plus d'informations
il y a 11 ans 9 mois #4057 par Laurent Dardenne
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 :P

Pas mal pour du scripting ;)<br><br>Message édité par: Laurent Dardenne, à: 16/02/09 18:35

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 9 mois #4182 par Laurent Dardenne
Les scripts seront mis à jour sur Codeplex Log4Posh .
Bon logs.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 8 mois #4281 par Laurent Dardenne
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(\&quot;NecessaryParameter\&quot;,\&quot;New-LogStringFilter\&quot;,\&quot;Appender\&quot;«»)),
[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 \&quot;$($SbProperties)\&quot;
$Filter=New-LogFilter log4net.Filter.StringMatchFilter $SbProperties
$Filter
}
}
process
{
if ($_)
{
Write-Debug (\&quot;Process : {0}\&quot; -F $MyInvocation.InvocationName)
NewStringFilter -Appender $_ -Reg $Regex -MatchStr $MatchStr -Inverse:$Inverse
#On émet un filtre
}
}
end
{
if ($Appender)
{
Write-Debug (\&quot;End : {0}\&quot; -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.

Plus d'informations
il y a 7 ans 3 jours #16382 par Laurent Dardenne
Un version simplifiée basée sur un fichier de configuration XML. Voir le projet de démo.

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.

Plus d'informations
il y a 4 ans 2 mois #22332 par Laurent Dardenne

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

Plus d'informations
il y a 3 ans 8 mois #23283 par Laurent Dardenne
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.

Tutoriels PowerShell

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

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