【问题标题】:LogManager.GetLogger in Powershell Module returns multiple objectsPowershell 模块中的 LogManager.GetLogger 返回多个对象
【发布时间】:2019-03-15 12:04:14
【问题描述】:

我正在尝试将 nlog.dll 包装在一个模块中,以便我可以为多个脚本重用该机制。

在模块中我这样做:

Set-StrictMode -Version Latest

function Get-NewLoggerTest() {
    [CmdletBinding(SupportsShouldProcess=$true)]
    Param (
        [Parameter(Mandatory=$true,HelpMessage="Provide the name of the logger.")]
        [string]$loggerName
    )

    [Reflection.Assembly]::LoadFile("C:\Program Files\WindowsPowerShell\Modules\ToolsTest\nlog.dll")

    # Creater logger object
    $logger = [NLog.LogManager]::GetLogger($loggerName)

    return $logger
}

Export-ModuleMember -Function Get-NewLoggerTest

现在我通过发出以下命令创建一个新的记录器:

Import-Module ToolsTest -Force
# Create a new logger
$logNew = Get-NewLoggerTest -loggerName "TEST Logger"

我现在遇到的问题是我必须通过使用来引用日志记录对象

$logNew[1].Debug("Debug Message")

$logNew.Debug 返回错误,因为返回了多个对象。

如果我这样做

$newLog | gm

它返回多个类型名称:

类型名称:System.Reflection.RuntimeAssembly 类型名称:NLog.Logger

我只关心 NLog 一个,有什么想法可以摆脱另一个吗?

当然我可以像这样重新分配它

$logNew = $logNew[1]

但这是我想避免的额外步骤。

【问题讨论】:

  • 我不确定这是 PS 还是 NLog 问题。无论如何,你可以在Get-NewLoggerTest中做return @($logger)[1]
  • 其他使用 NLog 和 PowerShell 的人:github.com/NLog/NLog/issues/233

标签: powershell module nlog


【解决方案1】:

我想我找到了解决办法。

移动

[Reflection.Assembly]::LoadFile("C:\Program Files\WindowsPowerShell\Modules\ToolsTest\nlog.dll")

函数外,解决了问题。我不知道为什么,但它现在可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 2019-02-23
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2023-03-13
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多