--- lang: ja-jp breaks: true --- # .NET Core C# で log4net を使う 2021-08-11 ## *.csproj で `AssemblyInfo.cs` の自動生成を抑止 ```xml= <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> ・・・ <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> ・・・ ``` ## AssemblyInfo.cs ```csharp= ・・・ *[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]* ・・・ ``` :::info `"log4net.config"`の部分は、.NET framework時代の`App.config`を使用しても動作する。ただし、該当ファイルのプロパティを、`新しい場合はコピーする`に変更すること。 ::: :::info 2021-11-13 追記 上記の方法でも動作するが、.NET Framework時代と同じように以下の処理で問題なく動作することを確認。 この方法であれば、`App.config`をコピーする必要はない。 ```csharp= [assembly: log4net.Config.XmlConfigurator(Watch = true)] ``` `csproj`ファイルに以下を追加する。 ```xml= <ItemGroup> <PackageReference Include="log4net" Version="2.0.13" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" /> </ItemGroup> ``` ::: ## log4net.config ```xml= <?xml version="1.0" encoding="utf-8" ?> <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"> <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=""_"yyyyMMdd".log"" /> <param name="MaxSizeRollBackups" value="100"/> <param name="MaximumFileSize" value="50MB"/> <layout type="log4net.Layout.PatternLayout"> <header type="log4net.Util.PatternString" value="[ task time %date]%newline" /> <footer type="log4net.Util.PatternString" value="[/task time %date]%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="BufferingForwardingAppender"/> </root> </log4net> </configuration> ``` ## LogManager.cs ```csharp= public static class LogManager { /// <summary> /// log4netによるログ出力クラスのインスタンス /// </summary> private static ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); static LogManager() { if (GetBufferingForwardingAppender() != null) { System.Threading.Timer timerFlush = new Timer((obj) => Flush()); timerFlush.Change(10000/* 10秒後に */, 10000/* 10秒間隔で */); } } public static void Flush() { BufferingForwardingAppender appender = GetBufferingForwardingAppender(); if (appender != null) { appender.Flush(); } } private static BufferingForwardingAppender GetBufferingForwardingAppender() { BufferingForwardingAppender appender = null; if (logger != null && logger.Logger != null) { if (logger.Logger.Repository is Hierarchy) { var repos = logger.Logger.Repository as Hierarchy; if (repos != null && repos.Root != null) { appender = repos.Root.GetAppender(typeof(BufferingForwardingAppender).Name) as BufferingForwardingAppender; } } } return appender; } public static string OutErrLog(string msg, Exception ex) { string msg = ""; if (logger != null) { if (logger.IsErrorEnabled) { msg = "[" + msg + "]" + ex.Message; logger.Error(msg, ex); } } return msg; } } ``` ###### tags: `.NET Core` `log4net` `C#`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up