尝试让log4net与PowerShell一起工作(混合使用log4net配置文件)

尝试让log4net与PowerShell一起工作(混合使用log4net配置文件),powershell,log4net,log4net-configuration,log4net-appender,Powershell,Log4net,Log4net Configuration,Log4net Appender,我一直在努力让log4net与PowerShell一起工作。我有下面的PowerShell代码,它将log4net与配置文件一起拉入,然后尝试创建一个简单的日志文件条目,但出错了 Clear-History Clear-Host # Write-Host "BEGIN: Importing module psm_logger.psm1" Import-Module "C:\Users\Administrator\Desktop\ps\IIS\psm_logger.psm1" -Force Wri

我一直在努力让log4net与PowerShell一起工作。我有下面的PowerShell代码,它将log4net与配置文件一起拉入,然后尝试创建一个简单的日志文件条目,但出错了

Clear-History
Clear-Host
#
Write-Host "BEGIN: Importing module psm_logger.psm1"
Import-Module "C:\Users\Administrator\Desktop\ps\IIS\psm_logger.psm1" -Force
Write-Host "BEGIN: log4net configuration definition"
$log = New-Logger -Configuration "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config" -Dll "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.dll"
Write-Host "END: log4net configuration definition"
Write-Host "BEGIN: log4net configuration DEBUG definition"
#$log.DebugFormat("Logger configuration file is : '{0}'", (Resolve-Path "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config"))
Write-Host "END: log4net DEBUG configuration definition"
#======================
$ThisHostname = $env:COMPUTERNAME
#======================
Write-Host "BEGIN: Module/Snapin import/addition"
Write-Host ""
$log.Info("BEGIN: Module/Snapin import/addition")
#======================
上述引用的psm_logger.psm1文件包含:

function New-Logger
{
#Write-Host "BEGIN: New-Logger"
<#
.SYNOPSIS
      This function creates a log4net logger instance already configured
.OUTPUTS
      The log4net logger instance ready to be used
#>
     [CmdletBinding()]
     Param
     (
          [string]
          # Path of the configuration file of log4net
          $Configuration,
          [Alias("Dll")]
          [string]
          # Log4net dll path
          $log4netDllPath
     )
     Write-Verbose "[New-Logger] Logger initialization"
     $log4netDllPath = Resolve-Path $log4netDllPath -ErrorAction SilentlyContinue -ErrorVariable Err
     if ($Err)
     {
          throw "Log4net library cannot be found on the path $log4netDllPath"
     }
     else
     {
          Write-Verbose "[New-Logger] Log4net dll path is : '$log4netDllPath'"
          [void][Reflection.Assembly]::LoadFrom($log4netDllPath) | Out-Null
          # Log4net configuration loading
          $log4netConfigFilePath = Resolve-Path $Configuration -ErrorAction SilentlyContinue -ErrorVariable Err
          if ($Err)
          {
               throw "Log4Net configuration file $Configuration cannot be found"
          }
          else
          {
               Write-Verbose "[New-Logger] Log4net configuration file is '$log4netConfigFilePath' "
               $FileInfo = New-Object System.IO.FileInfo($log4netConfigFilePath)
               [log4net.Config.XmlConfigurator]::Configure($FileInfo)
               $script:MyCommonLogger = [log4net.LogManager]::GetLogger("root")
               Write-Verbose "[New-Logger] Logger is configured"
               return $MyCommonLogger
          }
     }
}
功能新记录器
{
#写入主机“开始:新记录器”
[CmdletBinding()]
Param
(
[字符串]
#log4net配置文件的路径
$Configuration,
[别名(“Dll”)]
[字符串]
#Log4net动态链接库路径
$log4netDllPath
)
详细写入“[New Logger]Logger initialization”
$log4netDllPath=解析路径$log4netDllPath-ErrorAction SilentlyContinue-ErrorVariable Err
如果($Err)
{
抛出“在路径$log4netDllPath上找不到Log4net库”
}
其他的
{
详细写入“[New Logger]Log4net dll路径为:“$log4netDllPath”
[void][Reflection.Assembly]::LoadFrom($log4netDllPath)| Out Null
#Log4net配置加载
$log4netConfigFilePath=解析路径$Configuration-ErrorAction SilentlyContinue-ErrorVariable Err
如果($Err)
{
抛出“找不到Log4Net配置文件$configuration”
}
其他的
{
详细写入“[New Logger]Log4net配置文件为“$log4netConfigFilePath”
$FileInfo=New Object System.IO.FileInfo($log4netConfigFilePath)
[log4net.Config.XmlConfigurator]::配置($FileInfo)
$script:MyCommonLogger=[log4net.LogManager]::GetLogger(“根”)
详细写入“[New Logger]Logger已配置”
返回$MyCommonLogger
}
}
}
log4net的配置文件如下所示:


这对我很有帮助)

找到了解决方案

配置文件因顶部出现一些星号而损坏。删除这些选项修复了该问题。感谢所有可能已经开始关注这一点的人,我希望这对将来的其他人有所帮助

配置文件现在看起来像:


New Logger是一个非常有用的cmdlet,值得为更新版本的Powershell进行更新。psm_logger.psm1当前在PS V3及更高版本下给出System.Void错误。将部件负载更改为

[Reflection.Assembly]::LoadFrom($log4netDllPath) | Out-Null

没有[Void]就可以解决问题。

PowerGui显示变量$log有以下错误:{log4net:error XmlConfigurator:error while loading XML configuration,log4net.Core.LogImpl}