ASP.NET Core入門チュートリアル10、ASP.NET Coreログ記録(Nlog)入門
10553 ワード
一、前言
1、この教程の主な内容
2、このチュートリアルの環境情報
ソフトウェア/環境
説明
オペレーティングシステム
Windows 10
SDK
2.1.401
ASP.NET Core
2.1.3
IDE
Visual Studio Code 1.33.0
エクスプローラ
Chrome 73
VSコードカード
バージョン#バージョン#
説明
C#
1.18.0
C#インテリジェントな感知を提供する.NET Coreデバッグ、コンパイルなど
vscdoe-solution-explorer
0.3.1
ソリューションビューの提供
XML Tools
2.4.0
XMLハイライト、フォーマット、XMLツリーなどを提供
このコードは以下のコードで調整されます.https://github.com/ken-io/asp...
二、ASP.NET Core内蔵ログコンポーネント使用
ASP.NET Coreには、コンソールにログを出力できるログコンポーネントが内蔵されています
1、アプリケーション起動時の構成ログ
Program.cs
を変更し、WebHostBuilder構築時にログを構成//
using Microsoft.Extensions.Logging;
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Info);
logging.AddConsole();
});
コンフィギュレーション・アイテム
説明
ClearProviders()
通常、サードパーティのログ・コンポーネントを導入するときに使用されるログ・プロバイダのパージ
SetMinimumLevel(LogLevel.Information)
ログ・レベルをInformationに設定
AddConsole()
ログ・プロバイダの追加->コンソール
ここで設定項目は、主に
SetMinimumLevel(LogLevel.Information)
です.ログレベルをInformation
に設定すると、多くのコンソールのログ出力を減らすことができます.2、制御中にログを記録する
HomeController.cs
を修正し、構造関数によってILoggerを注入する//
using Microsoft.Extensions.Logging;
private readonly ILogger _logger;
public HomeController(ILogger logger)
{
this._logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("------\r
index:hello world\r
------");
return Content("Hello World ! -ken.io");
}
public IActionResult CheckPhone(string phone)
{
_logger.LogInformation($"------\r
check phone:{phone}\r
------");
var result = true;
var message = "pass";
if (string.IsNullOrWhiteSpace(phone))
{
result = false;
message = "phone number is empty";
_logger.LogError($"------\r
check phone:{message}\r
------");
}
else if (phone.Length != 11)
{
result = false;
message = "wrong phone number length";
_logger.LogWarning($"------\r
check phone:{message}\r
------");
}
return Json(new { Result = result, Phone = phone, Message = message });
}
ここで、ログコンテンツに含まれる
\r
エスケープは、コンソール出力時/ファイル書き込み時に改行を表します.ここで\r
と---
を追加するのは、主にログ出力時に、私たちがアクティブに記録したログを迅速に見つけるためです.3、検証
アプリケーションを起動し、localhost:5501にアクセスすると、コンソールが
Hello World
を出力していることがわかります.localhost:5001/home/checkphoneにアクセスすると、Errorログが表示されます.
localhost:5001/home/checkphoneにアクセスしますか?phone=000、警告ログが表示されます
localhost:5001/home/checkphoneにアクセスしますか?phone=166666666666、Infoレベルのログしか見えません
三、ASP.NET Core+Nlogローカルログの記録
1.Nlog Packageのインストール
コンソールでコマンドを使用してNlogパッケージをインストールします.
//
cd Ken.Tutorial.Web
// nlog
dotnet add package NLog.Web.AspNetCore --version 4.8.1
ここで私がインストールした指定バージョン:4.8.1、バージョン番号を指定しない場合は、デフォルトで最新バージョンがインストールされます.
2、Nlog導入
Program.cs
を変更し、WebHostBuilder構築時にログを構成//
using NLog.Web;
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Info);
logging.AddConsole();
}).UseNLog();//UseNLog
3、Nlogの配置
プロジェクトルートディレクトリ
Ken.Tutorial.Web
にNlogプロファイルnlog.config
を新規作成
Nlogプロファイルは、一般的には主に2つの部分を含み、ノード構成ログはターゲットに書き込まれ、ノード構成はルーティングされたルールに一致する.
主な構成項目
ken.ioの説明
${basedir}/logs/${level}/${shortdate}.log
プログラム実行ディレクトリに表示され、ログ・ファイルは日単位で書き込まれます.
${longdate}|${level:uppercase=true}|${logger}|${message}
ログコンテンツフォーマット:時間+ログレベル+LoggerName+ログコンテンツ
任意のレベル、任意のLoggerNameのログをtarget:defaultlogに書き込むことをサポート
プログラム実行時にプロファイルを読み取ることができるように、
Ken.Tutorial.Web.csproj
ファイルを修正し、binフォルダに実行ファイルを生成する際にもnlog.config
をコピーする必要があります.ツールバーでエクスプローラビューに切り替え、ファイルをダブルクリックして変更します.
4、Nlogテスト
次のリンクにアクセスするアプリケーションを起動します.
次に、エクスプローラビューでbin/Debugディレクトリを表示すると、ログがプロファイルのフォーマットで対応するログディレクトリおよびファイルを生成していることがわかります.
また、
nlog.config
は、以前の構成に従ってプログラム実行ディレクトリにコピーされていることもわかります.
四、Nlog使用進級
1、カスタムLoggerNameでログをまとめる
Nlog構成を追加し、LoggerNameに従ってディレクトリを作成
HomeController
にテスト帰納ログのアクションを追加public IActionResult TestLog()
{
var logger = NLog.LogManager.GetLogger("testlog");
logger.Trace(" Trace ");
logger.Debug(" Debug ");
logger.Info(" Info ");
logger.Warn(" ");
logger.Error(" ");
return Content("ok");
}
ここでは
NLog.LogManager.GetLogger
によってLogger
が直接作成され、内蔵ログMicrosoft.Extensions.Logging.ILogger
のインスタンスは使用されていないため、LoggerName
をカスタマイズすることができ、また、アプリケーション起動時に構成された最低ログレベルなどもこの方式には有効ではなく、Trace、Debugレベルの別のログを出力することができる.アプリケーションを起動し、アクセス:localhost:5001/home/testlog.logsフォルダの下でLoggerNameによって生成されたログ・ディレクトリをリソース・マネージャ・インタフェースに表示し、ログ・レベルに応じて異なるログ・ファイルを生成します.
2、ログファイルのサイズによってログをアーカイブする
Nlog構成を追加し、ログ・ファイル・サイズに従ってアーカイブ
ここでは、ログファイルのサイズが約1 mbを超える場合にアーカイブ(ここでは1 kbの代わりに1000 bをサボる)し、最大100個のログファイルをアーカイブし、アーカイブログファイルが100個を超えると最も早くアーカイブしたログを削除するように構成します.
排他的ルールの定義:
テストアーカイブログのアクションを
HomeController
に追加public IActionResult TestLogMany()
{
var logger = NLog.LogManager.GetLogger("logmany");
for (int i = 0; i <= 30000; i++)
{
logger.Info("ASP.NET Core , , NLog ,ken (https://ken.io)");
}
return Content("ok");
}
ここではテストを容易にするためにforループを直接用いて30000回連続してログに書き込む
アプリケーションを起動して、アクセス:localhost:5001/home/testlogmanyを起動し、logs/logmanyフォルダの下でファイルサイズでアーカイブされたログをリソースマネージャインタフェースで表示できます.
五、備考
1、Nlog常用配置項目説明
targetノード/プロパティ
ken.ioの説明
target
書き込みタイプ、書き込みテンプレート、ファイル名などを設定できるログ書き込みターゲット
name
TargetName,rulesノードで一意に参照する必要がある
xsi:type
ターゲットタイプ、サポートファイル(File)、データベース(Database)、メール(Mail)
keepFileOpen
パフォーマンスを向上させるため、ログに書き込むたびにファイルを開いたり閉じたりする必要はありません.デフォルトはfalseです.
encoding
ファイルコード、ここではutf-8
fileName
テンプレート構文/変数をサポートするログファイル名、ログのフルパスとファイル名を含む
archiveFileName
テンプレート構文/変数をサポートする、ログのフルパスとファイル名を含むアーカイブログファイル名
archiveNumbering
アーカイブ順序方式
maxArchiveFiles
最大アーカイブ・ログ・ファイル数
layout
ログコンテンツテンプレートには、いくつかの構文/変数が組み込まれています.
テンプレート構文/変数
ken.ioの説明
${basedir}
プログラムの現在の実行ディレクトリ
${level}
ログ・レベル
${shortdate}
現在の日付(例:2019-04-05
${longdate}
現在の時間は、ミリ秒まで正確です.たとえば、2019-04-05 14:10:22.4372
${uppercase:${level}}
内容を大文字にフォーマットする
${logger}
LoggerName、ログレコーダ名、通常はLoggerが初期化したクラスの完全な名前、例えばKen.Tutorial.Web.Controllers.HomeController
${machinename}
マシン名
${message}
ログの内容
rulesノード/プロパティ
ken.ioの説明
logger
ログレコーダルーティング規則構成
name
LoggerNameは、完全な一致とあいまいな一致をサポートします.たとえば、mylog、Ken.*
minlevel
最小ログ・レベル
maxlevel
最大ログ・レベル
level
単一のログ・レベルの制限
levels
1つ以上のログ・レベル、使用、間隔の指定
writeTo
1つ以上のtargetを指定し、使用、間隔
final
このルールに一致した後、後続のルールは一致しません.デフォルト:false
enabled
このルールを有効にするかどうか、デフォルト:true
2、付録
https://docs.microsoft.com/zh...
https://github.com/NLog/NLog....
https://github.com/nlog/NLog/...
この記事の後、私の独立ブログに先発しました.https://ken.io/note/asp.net-c...