Home > C# > PostgreSQL > Npgsql > ドキュメント

ログの記録 Npgsql

新規作成日 2019-03-07
最終更新日

Logging

備考:Npgsql 3.2.0と3.2.1は、Microsoft.Extensions.Loggingを使用するために、大幅に変更しました。いくつかの苦情や問題の後(#1504を参照)、この機能は、元に戻されました。Npgsql 3.2.2から、ロギング・サポートは、Npgsql 3.1と同じになりました。

Npgsqlには、問題のデバッグに役立つ、ログの記録イベントを出力するための組み込みの機能が含まれています。

Npgsqlのログ記録は、デフォルトで無効になっており、オンにする必要があります。ログの記録は、NpgsqlLogManager.ProviderをINpgsqlLoggingProviderインターフェイスを実装しているクラスに設定することで、オンにすることができます。Npgsqlには、次のように設定できる、コンソール実装が、付属しています。:

NpgsqlLogManager.Provider = new ???

備考:他のNpgsqlメソッドを呼び出す前に、あなたは、あなたのプログラムの最初に、ログの記録プロバイダを設定する必要があります。

あなたが使用する、どんなログの記録フレームワークでも、ログ・メッセージを渡すロギング・プロバイダを作成するのは、簡単です。あなたは、ここで、このようなNLogのためのアダプタを、見つけることができます。

備考:ロギングAPIは、最初の実装です。そして、おそらく、改善/変更されます。-それをNpgsql APIの安定した部分として扱わないでください。足りないメッセージや機能があると思われる場合は、私たちに、知らせてください!

ConsoleLoggingProvider

Npgsqlには、1つの組み込みのロギング・プロバイダが、付属しています。:ConsoleLoggingProvider。それは、単に与えられたレベル以上のすべてのログ・メッセージを標準出力にダンプします。あなたは、アプリケーションの最初に、次の行を含めることで設定できます。:

NpgsqlLogManager.Provider = new ConsoleLoggingProvider(<min level>, <print level?>, <print connector id?>);

デフォルトを(警告とエラーのみを印刷する)NpgsqlLogLevel.Infoと同じレベルにします。あなたは、ログ・レベルとコネクタIDも記録しておくことができます。

ステートメントとパラメータのロギング

Statement and Parameter Logging

Npgsqlは、Debugレベルで、すべてのSQLステートメントをログに記録します。これは、PostgreSQLに送信されている内容を、正確にデバッグするのに役立ちます。

既定では、Npgsqlは、機密情報が含まれている可能性があるため、パラメータ値を記録しません。NpgsqlLogManager.IsParameterLoggingEnabledをtrueに設定することによって、あなたは、パラメータ・ロギングをオンにすることができます。

NLogLoggingProvider(または独自の実装)

NLogLoggingProvider (or implementing your own)

次のプロバイダは、NLogにログ・メッセージを渡すために、Npgsqlの単体テストで使用されます。あなたのプロジェクトに、あるいは、独自のカスタム・プロバイダを実装するための開始位置として、それを使用するため、コピー&ペーストしてください。

class NLogLoggingProvider : INpgsqlLoggingProvider
{
    public NpgsqlLogger CreateLogger(string name)
    {
        return new NLogLogger(name);
    }
}

class NLogLogger : NpgsqlLogger
{
    readonly Logger _log;

    internal NLogLogger(string name)
    {
        _log = LogManager.GetLogger(name);
    }

    public override bool IsEnabled(NpgsqlLogLevel level)
    {
        return _log.IsEnabled(ToNLogLogLevel(level));
    }

    public override void Log(NpgsqlLogLevel level, int connectorId, string msg, Exception exception = null)
    {
        var ev = new LogEventInfo(ToNLogLogLevel(level), "", msg);
        if (exception != null)
            ev.Exception = exception;
        if (connectorId != 0)
            ev.Properties["ConnectorId"] = connectorId;
        _log.Log(ev);
    }

    static LogLevel ToNLogLogLevel(NpgsqlLogLevel level)
    {
        switch (level)
        {
        case NpgsqlLogLevel.Trace:
            return LogLevel.Trace;
        case NpgsqlLogLevel.Debug:
            return LogLevel.Debug;
        case NpgsqlLogLevel.Info:
            return LogLevel.Info;
        case NpgsqlLogLevel.Warn:
            return LogLevel.Warn;
        case NpgsqlLogLevel.Error:
            return LogLevel.Error;
        case NpgsqlLogLevel.Fatal:
            return LogLevel.Fatal;
        default:
            throw new ArgumentOutOfRangeException("level");
        }
    }
}
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」