Dot Net Core アプリケーション用の SQL Server データベースへのログインの実装。
このリポジトリには、SQL Server データベースへの ASP.NET Core ロガー プロバイダーの実装が含まれています。これにより、SQL データベース テーブルに情報を記録できるようになります。一般的な ASP.NET Core ロガーの実装については、ここを参照してください。
Daenet.Common.Logging.Sql NuGet パッケージをアプリケーションにインストールします。
SqlServerLogger を構成して初期化する必要があります。
ASP.NET Core Web アプリケーション
public static IWebHost BuildWebHost ( string [ ] args ) =>
WebHost . CreateDefaultBuilder ( args )
. UseStartup < Startup > ( )
. ConfigureLogging ( ( hostingContext , logging ) =>
{
var loggerSection = hostingContext . Configuration . GetSection ( "Logging" ) ;
logging . AddConfiguration ( loggerSection ) ;
logging . AddConsole ( ) ;
logging . AddDebug ( ) ;
logging . AddSqlServerLogger ( ( sett ) =>
{
sett . SetSqlServerLoggerSettings ( loggerSection ) ;
} ) ;
} )
. Build ( ) ;
}
コンソールアプリケーション
public IConfigurationRoot Configuration ;
var builder = new ConfigurationBuilder ( ) . AddJsonFile ( "appsettings.json" ) ;
Configuration = builder . Build ( ) ;
ILoggerFactory loggerFactory = new LoggerFactory ( ) . AddSqlServerLogger ( Configuration . GetSection ( "Logging" ) ) ;
ILogger logger = loggerFactory . CreateLogger < SqlServerLoggerTests > ( ) ;
appsettings.jsonで、 SqlProvider
部分をLogging
に追加する必要があります。
{
"Logging" : {
"IncludeScopes" : true ,
"Debug" : {
"LogLevel" : {
"Default" : " Information "
}
},
"Console" : {
"LogLevel" : {
"Default" : " Warning "
}
},
"SqlProvider" : {
"LogLevel" : {
"Default" : " Information "
},
"ConnectionString" : " " ,
"TableName" : " SqlLog " ,
"BatchSize" : 1 ,
"InsertTimerInSec" : 60 ,
"IncludeExceptionStackTrace" : false ,
"IgnoreLoggingErrors" : false ,
"ScopeSeparator" : " => "
}
}
}
LogLevel構成はグローバルおよびロガー レベルで行われます。「ASP.NET Core でのログ記録の概要」を参照してください。
IncludeScopeフラグは、ログが 1 つの特定のスコープ内で実行される場合に使用されます。 IncludeScope を true に設定し、 beginScope("scopeStatement")でコード内で初期化すると、データベースの「Scope」列の下に追加されるすべてのログに記録されたステートメントにスコープ ID が追加されます。次の例は、 IncludeScopesフラグが true に設定されている場合のロギングでのスコープの使用を示しています。
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}
これにより、スコープが開始されるクラスのすべてのオブジェクト インスタンスに「Scope begins : new 16 進数 guid 」が追加されます。
ConnectionString は、SQL 認証用の ADO.NET 接続文字列です。
TableName は、ロガーがログを記録するテーブルの名前です。
BatchSizeデータベースにメッセージを書き込むタイミングを決定します。 BatchSize
> 1 の場合は、リストを埋め、リスト数がBatchSize
に達するか、 InsertTimerInSec
によって DB への挿入がトリガーされるまで待ちます。 BatchSize > 1 の場合、データベースへのデータの書き込みは非同期になります。
InsertTimerInSec BatchSize
に達していない場合でも、ロガーがテーブルに書き込むときに経過した時間。
(1.0.7.2 で削除されました) CreateTblIfNotExistフラグを true に設定すると、データベースでまだ使用できない場合に、構成で指定されたテーブル名のテーブルをロガーに作成できるようになります。このフラグは、開発環境でロガーをテストするときに役立ちます。
IncludeExceptionStackTraceフラグは現在実装されておらず、このフラグに関係なく、完全な例外がテーブルに記録されます。
IgnoreLoggingErrorsフラグは、ログ記録時に例外が発生した場合にアプリケーションを失敗させるかどうかを決定します。 false に設定すると、ロガーは現時点でこれらのエラーをデバッグ コンソールに記録します。 **警告: BatchSize = 1 の場合にのみ機能します。
SQL データベースにエラーを記録するには、事前定義された列形式を持つテーブルがデータベースに存在する必要があります。次の列はロガーによって入力されます -
次のクエリは、上記のパラメーターを使用して SQL Database に新しいテーブルを作成します。これは、既定の形式の参照クエリとして使用する必要があります。
CREATE TABLE [dbo].[YourTableName](
[Id] [ bigint ] IDENTITY( 1 , 1 ) NOT NULL ,
[EventId] [ int ] NULL ,
[Type] [nvarchar]( 15 ) NOT NULL ,
[Scope] [nvarchar](MAX) NULL ,
[Message] [nvarchar](max) NOT NULL ,
[Exception] [nvarchar](max) NULL ,
[ TimeStamp ] [datetime] NOT NULL ,
[CategoryName] [nvarchar] (max) NULL ,
CONSTRAINT [PK_YourTableName] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
パラメータをデータベースに記録することも可能です。この例では、RequestId とスコープをデータベースに記録します。これを機能させるには、もちろん列を作成する必要があります。
この構成はLogging
のSqlProvider
セクションに追加する必要があります。
次に、2 .NET Core の内部ログ パラメーターをログに記録する方法の例を示します。ロギングで使用するパラメータを使用して、これを拡張できます。ここでの良い例は、一般的な方法でメソッド名を記録するための{method}
です。
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}
loggingFormatter を提供することで、独自のカスタム ロギング形式を使用することもできます。