powershell + log4net

log4.net.xml

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\work\ps-log4net\log\test.log"/>
            <appendToFile value="true"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%-5level] [%logger] [%username] - %message%newline"/>
            </layout>
            <Encoding value="UTF-8"/>
            <param name="AppendToFile" value="true" />
        </appender>
        <root>
            <level value="ALL"/>
            <appender-ref ref="FileAppender"/>
        </root>
    </log4net>
</configuration>

sample.ps1

$appdir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) + "\";

#log4netのDLL読み込み
$dllFile = $appdir + "log4net\log4net.dll";
Add-Type -Path $dllFile;

#log4net設定ファイル読み込み
$xmlFile = $appdir + "log4net\log4net.xml";
$configFile = Get-Item $xmlFile;
[log4net.Config.XmlConfigurator]::Configure($configFile);

#ロガーの定義
$logger = [log4net.LogManager]::GetLogger($script:myInvocation.MyCommand.Name);

#log4netでログ出力
$logger.Info("info");
$logger.Debug("debug");
$logger.Warn("warn");
$logger.Error("error");
$logger.Fatal("fatal");

try {
    $a = 1 / 0;
}
catch [Exception] {
    $logger.Error($_.ScriptStackTrace);
    $logger.Error($_.exception);
    throw $_;
}