PowerShellからlog4netでロガー作って使ってみた

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-1.2.13\bin\net\4.0\release\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] - ふぇいたる

動きは確認していかないといけないと思いますが、とりあえずログ出力まではできました。