powershell - 在 Powershell 中适当登录

标签 powershell logging

如果我有一个名为 caller.ps1 的 powershell 脚本,它看起来像这样

.\Lib\library.ps1

$output = SomeLibraryFunction

library.ps1 如下所示

function SomeLibraryFunction()
{
   Write-Output "Some meaningful function logging text"
   Write-Output "return value"
}

我想要实现的是一种方法,其中库函数可以返回它的值,但也可以添加一些日志消息,允许调用者按他们认为合适的方式处理这些内部消息。我能想到的最好办法是将两者都写入管道,然后调用者将拥有一个数组,其中包含实际返回值以及可能对调用脚本具有的记录器有用的内部消息。

我是否以正确的方式解决这个问题?有没有更好的方法来实现这一点?

最佳答案

将日志消息与实际输出混合通常不是一个好主意。然后,您函数的消费者必须进行大量过滤才能找到他们真正想要的对象。

您的函数应该将日志消息写入详细输出流。如果调用者想要查看这些消息,可以通过指定 -Verbose 切换到您的函数。

function SomeLibraryFunction()
{
    [CmdletBinding()]
    param(
    )

    Write-Verbose "Some meaningful function logging text"
    Write-Output "return value"
}

在 PowerShell 3+ 中,消费者可以 redirect your verbose messages to the output stream or a file :

# Show verbose logging messages on the console
SomeLibraryFunction -Verbose 

# Send verbose logging messages to a file
SomeLibraryFunction -Verbose 4> verbose.txt

# redirect verbose message to the output stream
SomeLibraryFunction -Verbose 4>&1 

其他选项包括:

  • 写入众所周知的文件
  • 写入事件日志
  • 使用 Start-Transcript 创建 session 日志。

关于powershell - 在 Powershell 中适当登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552550/

相关文章:

logging - 如何登录 Haskell?

logging - 检查是否设置了特定级别,如果设置了,则登录该级别

一个元素结果的 PowerShell Cmdlet .length 属性

powershell - 我希望能够拆分目录及其子目录的输出

powershell - 在 powershell 的列中处理带有换行符的 CSV

PowerShell:如何查找和卸载 MS Office 更新

powershell - 当我试图模仿击键时返回 false 的值

logging - RollingFile Appender Log4j2 不打印行号

python 日志记录 : difference between 2. 6 和 2.7

logging - 通过 clojure.tools.logging 在同一个命名空间中使用多个记录器