面倒、死のう

すごくなんかネカマっぽいテーマがあったしこれにしとこう

PowerShellでNLogのlogFileをスクリプトと同じパスに出力(外部設定ファイル編)

出来たよ~

昨日は絶対パスか動的指定するしかない、と申し上げましたが
configファイルに極力設定を持っていきながら
PowerShellスクリプトファイル辺りにテキストログを出すことができました。ありがとうございます。
味噌としては、

##PowerShellだよ
 [NLog.GlobalDiagnosticsContext]::set("scrDir","$pwd")

とNLogへ動的に値を入れる仕組みがございまして。えぇ。存じ上げませんでした。
configファイルのfileNameにその値を呼び出すように書いてあげれば
他のレイアウトとかは全てconfigファイルで設定を管理できるデス。
忘備として稚拙なソースも張っておこう。

loggerを生成するPowerShellファンクション

function New-Logger {
  param (
    [parameter(Mandatory=$true)][string] $LoggerName,
    [parameter(Mandatory=$true)][string] $ConfigFile
  )
  [NLog.GlobalDiagnosticsContext]::set("scrDir","$pwd")
  $config = New-Object NLog.Config.xmlLoggingConfiguration($ConfigFile)
  ([NLog.LogManager]::Configuration) = $config
  $logger = [NLog.LogManager]::GetLogger($loggerName)
  return $logger
}

NLogコンフィグファイル

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
  <targets>
    <target name="logFile" xsi:type="File" fileName="${gdc:item=scrDir}\Log\psnlog.log" />
    <target name ="logConsole" xsi:type="Console" />
  </targets>
 
  <rules>
    <logger name="*" minlevel="Debug" writeTo="logFile" />
    <logger name="*" minlevel="Info" writeTo="logConsole" />
  </rules>
</nlog>

でもなぜか、fileNameに${longdate}とか入れてファイル名に日時を入れようとすると
ログを出力するタイミングの日時でファイルがバカバカ作られてしまう。
logger生成時点のファイル名に追記してほしいんだけどな。
log4netではできてた記憶があるので、なんか足りないんだろう。