はじめに:この章では、単に基本的な単純なアプリケーションです、log4netの後続の章では、私のプロジェクトの状況に応じての綿密な調査を実施します
構築する1.プロジェクト
- .netCore2.x =>ここで言及基づいて新しいWebプロジェクトを作成します。
- log4netのパッケージには、新しいプロジェクトを(NuGetがインストールされている)をインストールするには=>ここで言及
2.プロファイルを追加log4Net.config
プロファイルパスルートディレクトリ上にある、私は(仕事のために、独自の外観にできるだけ)少ない時間を読むことが怖いです
2.1コンフィギュレーションファイルの内容
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < 設定> < log4netの> < ルート> < レベル値= "ALL" /> < アペンダ-REF REF = "RollingFile" /> </ ルート> < アペンダの名前は= "RollingFile" タイプ= "log4net.Appender.RollingFileAppender" > <! - ファイルパス設定されていません(マイナス値= "ログ")[App_Dataに]フォルダにデフォルトを保存した場合- > < PARAM 名= "」ファイルの値= "ログイン" /> <! -ファイルに追加- > < PARAM 名= "AppendToFile" 値= "trueに" /> <! - ファイルの数が最も、設定されて保持するために、 "-1"ではない- > < PARAM 名= "MaxSizeRollBackups" 値= "365" /> <! - ファイルへの書き込み- > < PARAM 名= "StaticLogFileName" 値= "偽" /> <! - 日付で指定されたファイル名、- > < PARAM 名=「DatePattern " 値=" YYYYMMDD&QUOT;&QUOTの.log; " /> <! - 、オプションの値道のログファイルを作成:日付[日付]、ファイルサイズ[サイズ]、混合[コンポジット] - > < のParam 名= "RollingStyle" 値= "日付" /> <! - ログフォーマット- > < レイアウトタイプ= "log4net.Layout.PatternLayout" > <! - ログ%の改行出力行は{[%の日付を変更しますHHは:MM:SSのFFFは}]録画時間を表します 。 - > < ConversionPattern 値= "[%{DATE HH:MM:SSのFFF}]% - %% NEWLINEメッセージ" /> <! - あなたが所有する場合のフォーマット我々は唯一の必要に- > <! - <ConversionPattern値= "%メッセージ" /> - > </ レイアウト> </ アペンダ> </ log4netの> </ 設定>
PSは:、何の直感的な経験を最初に、それは問題ではない理解していないと言うことはありません、私は無駄に言います
2.2登録サービスlog4netの
- の実装
これは以下のように、私がオンライン読んだほとんどの実装で、Startup.csで静的変数を作成し、他のクラスではLogオブジェクトを取得するには、この静的メソッドを呼び出します。
パブリック クラススタートアップ { 公共の 静的 {ILoggerRepositoryリポジトリを取得。セット; }
公共起動(IConfiguration構成) { 設定 = 構成; リポジトリ = LogManager.CreateRepository(" NETCoreRepository " )。 // 指定配置文件 XmlConfigurator.Configure(リポジトリ、新しいのFileInfo(" log4net.config " )); } } パブリック クラスHomeController:コントローラ { プライベートアイログログ。 公的にHomeController(IHostingEnvironment hostingEnv) { 本の.log = LogManager.GetLogger(Startup.repository.Name、typeof演算(にHomeController))。 } 公共IActionResultインデックス() { log.Error(" 测试日志" )。 返すビューを(); } }
PS: 私はなぜアイログサービス、それにコンストラクタ・インジェクションの直接のアクセスを注入しないnetcoreので、使用中に、と思います。実際には、パラメータのtypeofでおそらく最大のパス(にHomeController)取得Logインスタンス時にブログにフォーラムを検索します
https://blog.csdn.net/lixwjava/article/details/45950559
私のプロジェクトでは、出力形式のためのいくつかの規定があるだろう、二次包装のためにログを書き込みますので、私はサービス、直接注入、その後のブログでカプセル化する方法の詳細な分析をログに記録します。
- 2の実装
次の結果、コードConfigureServices方法Startup.csファイルを追加します。
公共 のボイドConfigureServices(IServiceCollectionサービス) { services.Configure <CookiePolicyOptions>(オプション=> { // このラムダは非本質的なクッキーのためのユーザーの同意が与えられた要求のために必要とされているかどうかを決定する。 options.CheckConsentNeededコンテキスト=> = 真; オプションを。 MinimumSameSitePolicy = SameSiteMode.None; }); VaRのリポジトリ= LogManager.CreateRepository(" NETCoreLogRepository " )。 XmlConfigurator.Configure(リポジトリ、新しいのFileInfo("log4net.config " )); services.AddSingleton <のILog>(LogManager.GetLogger(repository.Name、typeof演算(起動))); }
3段階のプロセスを作成します。
。log4netの倉庫リポジトリを作成します。
B。倉庫・プロファイル・パスを指定します
C。でサービスに注入Logインスタンスを作成します。
2.2使用
次のように、コンストラクタ・インジェクション直接ログを書き込むために必要とされるプロジェクト:
パブリック クラスにHomeController:コントローラ { 公共の 読み取り専用のILOG _log。 公的にHomeController(アイログログ) { _log = ログ。 _log.Info(" これはinfo情報です" ); } }
上記の、最も簡単な方法は、使用しています。パートIIは、ログレベルに応じて異なるファイルを作成する方法について説明します。
追伸:一瞬後に考え、実際には、私たちがすることができ ILoggerRepositoryは代わりのILogを注入するtypeof演算は、オブジェクトを追跡するために使用される場合は、あなたが動的に指定することができるサービスに注入し、とにかく、次のように、静的変数を使用したくないです。
公共 のボイドConfigureServices(IServiceCollectionサービス) { services.Configure <CookiePolicyOptions>(オプション=> { // このラムダは非本質的なクッキーのためのユーザーの同意が与えられた要求のために必要とされているかどうかを決定する。 options.CheckConsentNeededコンテキスト=> = 真; オプションを。 MinimumSameSitePolicy = SameSiteMode.None; }); VaRのリポジトリ= LogManager.CreateRepository(" NETCoreLogRepository " )。 XmlConfigurator.Configure(リポジトリ、新しいのFileInfo("log4net.config " )); services.AddSingleton <ILoggerRepository> (リポジトリ)); } パブリック クラスにHomeController:コントローラ { 公共の 読み取り専用のILOG _log、 公衆にHomeController( ILoggerRepositoryリポジトリ) { _log = LogManager.GetLogger(repository.Name、 typeof演算(にHomeController )); _log.Info("これはinfo情報です"); } }