0

PowerShell スクリプトで NLog を使用しています。メッセージは、スクリプトに関連するディレクトリ内のファイルに記録されます。

Xml 構成ファイルで相対パスを指定できるようにしたいのですが、この構文は機能しません。

<target name="logfile" xsi:type="File" fileName="./Logs/${logger}/${logger}.${date:format=yyyyMMdd}.${date:format=HHmmss}.log" createDirs="true" layout="${machinename}|${environment-user}|${logger}|${date:format=yyyy-MM-dd HH\:mm\:ss}|${level:uppercase=true}|${message}"/>

現在、私はこれをやっています:

$ScriptName = (Get-Item $PSCommandPath).Basename
$Here = Split-Path -Parent $MyInvocation.MyCommand.Path

# create logger
$Logger = [NLog.LogManager]::GetLogger($ScriptName)

# load Xml configuration file (in the same directory as script)
$Configuration = [NLog.Config.XmlLoggingConfiguration]::new("$Here/$ScriptName.NLog.config")    
[NLog.LogManager]::Configuration = $Configuration

# reconfigure the file target
$target = $Configuration.FindTargetByName("logfile")
$target.FileName = "$Here/Logs/$ScriptName/$ScriptName.$( (get-date).tostring('yyyyMMdd.HHmmss') ).log"
[NLog.LogManager]::ReconfigExistingLoggers()

Xml 構成ファイルで相対パスを使用する方法はありますか?

4

2 に答える 2

1

NLog-Config-Variables を利用できる代替手段:

<nlog>
    <variable name="ScriptDirectory" value="${currentdir}" />

    <targets>
       <target name="logfile" xsi:type="File" fileName="${var:ScriptDirectory}/Logs/${logger}/${logger}.${date:format=yyyyMMdd}.${date:format=HHmmss}.log" />
    </targets>

    <rules>
       <logger name="*" minLevel="Debug" writeTo="logfile" />
    </rules>
</nlog>

そして、単に割り当てます

NLog.LogManager.Configuration.Variables["ScriptDirectory"] = absolutePath;

その後、望ましくない副作用が発生する可能性がある現在のディレクトリを調整する必要はありません。

于 2020-12-21T21:53:08.510 に答える