ユーザ用ツール

サイト用ツール


it技術:dotnet:ログ出力

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:dotnet:ログ出力 [2018/07/20 11:59] yajuadminit技術:dotnet:ログ出力 [2023/01/24 09:46] (現在) – [ログローテーション連番] yajuadmin
行 5: 行 5:
   * [[http://www.atmarkit.co.jp/ait/articles/0712/25/news121.html|オープンソースのロギング・サービス「log4net」を使う ]]   * [[http://www.atmarkit.co.jp/ait/articles/0712/25/news121.html|オープンソースのロギング・サービス「log4net」を使う ]]
   * [[http://sumurai993.hatenablog.com/entry/2015/07/23/072345|いまさら聞けない「log4net」の使い方]]   * [[http://sumurai993.hatenablog.com/entry/2015/07/23/072345|いまさら聞けない「log4net」の使い方]]
 +  * [[https://ameblo.jp/yukkov/entry-10473035979.html|log4net.dll 設定ファイル]]
   * [[http://kitunechan.hatenablog.jp/entry/2016/05/13/111711|コードだけでlog4netを使う]]   * [[http://kitunechan.hatenablog.jp/entry/2016/05/13/111711|コードだけでlog4netを使う]]
 +  * [[https://qiita.com/n-shima/items/31a98d182f0519249fd0|Log4Netは開発休止になったのか?]]
  
 ==== 導入 ==== ==== 導入 ====
 メニューのツール > Nugetパッケージ マネージャー > ソリューションのNugetパッケージ管理から、オンラインで「log4net」を検索して、該当プロジェクトへインストールする。 メニューのツール > Nugetパッケージ マネージャー > ソリューションのNugetパッケージ管理から、オンラインで「log4net」を検索して、該当プロジェクトへインストールする。
  
-==== 設定 ====+==== Winフォームでの設定 ====
 === AssemblyInfo === === AssemblyInfo ===
 AssemblyInfo.vbに下記の設定をしないと、ログが出力されてこない。 AssemblyInfo.vbに下記の設定をしないと、ログが出力されてこない。
行 16: 行 18:
 'App.configに設定した場合 'App.configに設定した場合
 <Assembly: log4net.Config.XmlConfigurator(Watch:=True)> <Assembly: log4net.Config.XmlConfigurator(Watch:=True)>
 +
 '外部ファイルにして使用する場合 '外部ファイルにして使用する場合
-'<Assembly: log4net.Config.XmlConfigurator(ConfigFile:="Log4net.xml", Watch:=True)>  +<Assembly: log4net.Config.XmlConfigurator(ConfigFile:="Log4net.xml", Watch:=True)>  
 </code> </code>
  
行 24: 行 27:
 //App.configに設定した場合 //App.configに設定した場合
 [assembly: log4net.Config.XmlConfigurator(Watch = true)] [assembly: log4net.Config.XmlConfigurator(Watch = true)]
 +
 //外部ファイルにして使用する場合 //外部ファイルにして使用する場合
-[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.xml", Watch = True)]+[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4net.xml", Watch = true)]
 </code> </code>
  
行 101: 行 105:
     </root>     </root>
    
 +  </log4net>
 +</code>
 +
 +==== ASP.NETでの設定 ====
 +AssemblyInfoの代わりに、Global.aspx に定義を行う。\\
 +※但し、ログ設定を別ファイルにする場合は、AssemblyInfo に記述する。\\
 +App.configの代わりにWeb.Configに設定を追加する。
 +
 +[[https://oki2a24.com/2015/10/18/use-log4net-in-asp-net-mvc5/|【ASP.NET MVC5】log4net の導入手順メモ♪]]
 +
 +指定したlogsフォルダはWeb.configと同じ階層に作成される。
 +
 +=== Global.aspx ===
 +<code csharp Global.aspx.cs>
 +protected void Application_Start()
 +{
 +    log4net.Config.XmlConfigurator.Configure();
 +    AreaRegistration.RegisterAllAreas();
 +    RouteConfig.RegisterRoutes(RouteTable.Routes);
 +}
 +</code>
 +
 +=== Web.Config ===
 +<code xml Web.Confog>
 +  <configSections>
 +    <!-- log4netセクションのハンドラ設定 -->
 +    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 +  </configSections>
 +
 +  <log4net>
 +    <!-- ===================================================================== -->
 +    <!--     ログ出力の対象レベルと出力先の設定                                -->
 +    <!-- ===================================================================== -->
 +    <root>
 +      <!-- ログのレベルを指定 -->
 +      <!-- ALL > DEBUG > INFO > WARN > ERROR > FATAL -->
 +      <level value="ALL"/>
 +      <!-- どのログ出力先を使用するか -->
 +      <appender-ref ref="RollingFileAppender"/>
 +    </root>
 +    <!-- ===================================================================== -->
 +    <!--                 ログ出力先の設定(アペンダーの設定)                    -->
 +    <!-- ===================================================================== -->
 +    <!-- ▼ファイル出力用[RollingFileAppender](日付や時刻の制約に基づいたログファイルの生成) -->
 +    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
 +      <param name="Encoding" value="utf-8"/>
 +      <!-- ファイル名 -->
 +      <param name="File" value="logs\"/>
 +      <!-- 追記する場合true/上書きする場合false -->
 +      <param name="AppendToFile" value="true"/>
 +      <!-- 日付や時刻の制約によるログファイルの切替 -->
 +      <param name="RollingStyle" value="Date"/>
 +      <!-- 上から「毎月、毎週、毎日、半日、毎時、毎分」の設定(デフォルトは毎時) -->
 +      <param name="DatePattern" value='""yyyyMMdd".log"'/>
 +      <param name="StaticLogFileName" value="false"/>
 +      <layout type="log4net.Layout.PatternLayout">
 +        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
 +      </layout>
 +    </appender>
   </log4net>   </log4net>
 </code> </code>
行 130: 行 193:
     _logger.Fatal("システムが停止する致命的な障害が発生");     _logger.Fatal("システムが停止する致命的な障害が発生");
 </code> </code>
 +
 +[[https://garafu.blogspot.com/2014/05/log4net_26.html|log4net で 出力先 ファイル名 を 動的に 取得、設定 する 方法]]
 +
 +==== ログが途中で止まる現象 ====
 +とあるシステムで発生している。最後まで出力されたり途中で止まっていて不安定。
 +
 +>Log4Net は、何か問題が発生してアペンダーに書き込めない場合、黙って失敗します。
 +>これは実際には良いことです。ロギングに少し失敗しても、正常なシステムがダウンすることはないからです。
 +>最善の策は、log4net の内部ログを有効にして診断を行い、(できれば) 失敗の原因を突き止めることです。
 +
 +  * https://stackoverflow.com/questions/2263301/log4net-randomly-stops-logging
 +  * https://stackoverflow.com/questions/40077917/log4net-internal-debug-timestamp
 +  * [[https://pgroene.wordpress.com/2017/07/03/log4net-troubleshooting/|Log4Net troubleshooting, debug your configuration]]
 +
 +<code xml>
 +<?xml version="1.0" encoding="utf-8" ?>
 +<configuration>
 +  <appSettings>
 +    <add key="log4net.Internal.Debug" value="true"/>
 +  </appSettings>
 +</configuration>
 +</code>
 +これにより送信される内部ログがオンになる。System.Diagnostics.Traceため、以下を追加できます。
 +
 +<code xml>
 +<configuration>
 +  ...
 +  <system.diagnostics>
 +    <trace autoflush="true">
 +      <listeners>
 +        <add name="textWriterTraceListener" 
 +             type="System.Diagnostics.TextWriterTraceListener" 
 +             initializeData="C:\temp\log4net.txt" />
 +      </listeners>
 +    </trace>
 +  </system.diagnostics>
 +  ...
 +</configuration>
 +</code>
 +
 +出力されたログにはタイムスタンプが付いていない。[[https://github.com/apache/logging-log4net/pull/49|プルリクエスト]]があったが、放棄されたようだ。
 +
 +==== ログローテーション連番 ====
 +CountDirection:ローテの連番をどの様に振るか。
 +  * 0未満 : 常に同じ連番が使われる。デフォルト値(-1)。
 +  * 0以上 : 新たな連番が使われる。
 +
 +xxxx.log.1 というように拡張子の後ろに連番が付く。ファイル名を日パターンにしても同様。
 +
 +[[https://shima111.hatenadiary.org/entry/20060627/p1|Log4net(6) RollingFileAppender 意味不明パラメータ:CountDirection]]
 +==== 参照 ====
 +  * [[https://devlights.hatenablog.com/entry/20110216/p2|Log4Netで複数プロセスから同じログファイルに書き込み (log4net.config, lockingModel, FileAppender+MinimalLock, Appender)]]
 +  * [[https://www.kinakomotitti.net/entry/2017/10/31/231607|log4net × Lock Model × Mutex]]
 +  * [[http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28121&forum=7|log4net 使用時にログファイルがロックされ読み込みできない]]
 +  * [[http://www.atmarkit.co.jp/ait/articles/0802/14/news138.html|オープン中のファイルにアクセスするには?[C#、VB]]]
  
 ===== NLog ===== ===== NLog =====
行 137: 行 255:
   * [[http://ohke.hateblo.jp/entry/2017/02/24/221702|NET Coreアプリケーションでログ出力にはNLogが良いみたいですね]]   * [[http://ohke.hateblo.jp/entry/2017/02/24/221702|NET Coreアプリケーションでログ出力にはNLogが良いみたいですね]]
   * [[https://www.infoq.com/jp/news/2015/07/nlog4|最新版の NLog は例外ログを改善し、JSON/Zip をサポートした]]   * [[https://www.infoq.com/jp/news/2015/07/nlog4|最新版の NLog は例外ログを改善し、JSON/Zip をサポートした]]
 +  * [[https://techinfoofmicrosofttech.osscons.jp/index.php?NLog#d47c5b58|Apache log4netとの違い]]
  
 ===== その他 ===== ===== その他 =====
it技術/dotnet/ログ出力.1532055586.txt.gz · 最終更新: 2018/07/20 11:59 by yajuadmin