--- lang: ja-jp breaks: true --- # `WinUI 3` で `log4net` を使用する 2022-11-22 普通に使えた。`MSIX` による `サイドローディング` パッケージ配布後でも普通に使える。 ## csproj ```xml= <Project Sdk="Microsoft.NET.Sdk"> ・・・ <ItemGroup> <PackageReference Include="log4net" Version="2.0.15" /> </ItemGroup> ・・・ </Project> ``` ## App.xaml.cs ```csharp= [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] namespace WinUI3LogOutput; public partial class App : Application { public static ILog logger = LogManager.GetLogger(typeof(Program)); public App() { this.InitializeComponent(); } protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { m_window = new MainWindow(); m_window.Activate(); } private Window m_window; } ``` ## MainWindow.xaml.cs ```csharp= namespace WinUI3LogOutput; /// <summary> /// An empty window that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainWindow : Window { public MainWindow() { this.InitializeComponent(); } private void myButton_Click(object sender, RoutedEventArgs e) { myButton.Content = "Clicked"; App.logger.Debug("ログ出力のテスト"); } } ``` ## log4net.config ```xml= <?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <param name="File" value="${TEMP}\${COMPUTERNAME}_XXXXXXXX"/> <param name="AppendToFile" value="true"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="&quot;_&quot;yyyyMMdd&quot;.log&quot;"/> <param name="MaxSizeRollBackups" value="100"/> <param name="MaximumFileSize" value="50MB"/> <layout type="log4net.Layout.PatternLayout"> <header type="log4net.Util.PatternString" value="[ task time = &quot;%date{HH:mm:ss,fff}&quot;]%newline"/> <footer type="log4net.Util.PatternString" value="[/task time = &quot;%date{HH:mm:ss,fff}&quot;]%newline"/> <param name="ConversionPattern" value="%d [%-2t] %-5p %m%n"/> </layout> <Encoding value="UTF-8"/> </appender> <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> <bufferSize value="512000" /> <appender-ref ref="RollingLogFileAppender" /> <!-- <Fix value="All"/> <Fix value="NONE"/> <Fix value="Partial"/> <Fix value="463"/> --> <Fix value="463"/> </appender> <root> <!-- ログのレベルを指定 --> <!-- すべてのログレベルを出力 --> <!-- <level value="ALL" /> <level value="DEBUG" /> <level value="INFO" /> <level value="WARN" /> <level value="ERROR" /> <level value="FATAL" /> --> <level value="ALL"/> <!-- どのログ出力先を使用するか --> <!-- <appender-ref ref="RollingLogFileAppender"/> <appender-ref ref="BufferingForwardingAppender" /> --> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration> ``` ![](https://i.imgur.com/Fr81uh8.png) ## App.config でも対応可能 ```xml= <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <appSettings> <!-- log4net 内部のデバッグメッセージを出力 --> <add key="log4net.Internal.Debug" value="false" /> </appSettings> <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <param name="File" value="${TEMP}\${COMPUTERNAME}_XXXXXXXX"/> <param name="AppendToFile" value="true"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="&quot;_&quot;yyyyMMdd&quot;.log&quot;"/> <param name="MaxSizeRollBackups" value="100"/> <param name="MaximumFileSize" value="50MB"/> <layout type="log4net.Layout.PatternLayout"> <header type="log4net.Util.PatternString" value="[ task time = &quot;%date{HH:mm:ss,fff}&quot;]%newline"/> <footer type="log4net.Util.PatternString" value="[/task time = &quot;%date{HH:mm:ss,fff}&quot;]%newline"/> <param name="ConversionPattern" value="%d [%-2t] %-5p %m%n"/> </layout> <Encoding value="UTF-8"/> </appender> <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> <bufferSize value="512000" /> <appender-ref ref="RollingLogFileAppender" /> <!-- <Fix value="All"/> <Fix value="NONE"/> <Fix value="Partial"/> <Fix value="463"/> --> <Fix value="463"/> </appender> <root> <!-- ログのレベルを指定 --> <!-- すべてのログレベルを出力 --> <!-- <level value="ALL" /> <level value="DEBUG" /> <level value="INFO" /> <level value="WARN" /> <level value="ERROR" /> <level value="FATAL" /> --> <level value="ALL"/> <!-- どのログ出力先を使用するか --> <!-- <appender-ref ref="RollingLogFileAppender"/> <appender-ref ref="BufferingForwardingAppender" /> --> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration> ``` ###### tags: `WinUI 3` `log4net` `MSIX` `ロギング`