PowerShellのロガーについて、Out-Fileとかを使った自作ロガー作っていたりしたのですが、他に方法無いか探してみました。
そこでPowerShellからNlog使えるという以下の記事を見つけて、log4netも試してみました。
PowerShellとNLog | 84zume Works
必要なファイルの準備
まず、以下のURLからlog4netをダウンロードします。
http://logging.apache.org/log4net/
今回使ったバージョンはlog4net 1.2.13で、.Net4のものを利用しました。
必要なファイルはlog4net.dllです。
log4net設定ファイル
シンプルなFileAppenderを利用してみました。XMLに以下のように設定してlog4net.xmlという名前で保存します。
ログメッセージのフォーマットとなるconversionPatternではPowerShellではあまり使える項目無かったです。(もっと調べればできるかも)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="C:\PowerShell\log\logfile.txt"/> <appendToFile value="true"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%-5level] [%logger] [%username] - %message%newline"/> </layout> </appender> <root> <level value="ALL"/> <appender-ref ref="FileAppender"/> </root> </log4net> </configuration>
PowerShellスクリプト
PowerShellから上記で準備したDLLと設定ファイルのXMLを読み込み、ロガーを作成してロギングしてみました。
ファイル名はLoggerTest.ps1としています。
#log4netのDLL読み込み Add-Type -Path "C:\PowerShell\lib\log4net.dll" #log4net設定ファイル読み込み $configFile = Get-Item "C:\PowerShell\conf\log4net.xml" [log4net.Config.XmlConfigurator]::Configure($configFile) #log4netでログ出力 #Logger名にはスクリプト名を利用してみてます $logger = [log4net.LogManager]::GetLogger($script:myInvocation.MyCommand.Name) $logger.Info("いんふぉ") $logger.Debug("でばっぐ") $logger.Warn("わーん") $logger.Error("えらー") $logger.Fatal("ふぇいたる")
ログファイルの中身
ちゃんとロギングできていました。
2014-10-31 20:00:48,281 [INFO ] [LoggerTest.ps1] [administrator] - いんふぉ 2014-10-31 20:00:48,281 [DEBUG] [LoggerTest.ps1] [administrator] - でばっぐ 2014-10-31 20:00:48,281 [WARN ] [LoggerTest.ps1] [administrator] - わーん 2014-10-31 20:00:48,281 [ERROR] [LoggerTest.ps1] [administrator] - えらー 2014-10-31 20:00:48,281 [FATAL] [LoggerTest.ps1] [administrator] - ふぇいたる
動きは確認していかないといけないと思いますが、とりあえずログ出力まではできました。