尝试让log4net与PowerShell一起工作(混合使用log4net配置文件)
我一直在努力让log4net与PowerShell一起工作。我有下面的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
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}