0

npgsqlログ出力をlog4netロガーにリダイレクトすることは可能ですか?npgsqlソースコードからは、stdout / stderrまたは指定されたファイルに直接ログを記録しているように見えます(の静的プロパティを使用NpgsqlEventLog)。そのロギングをlog4netにルーティングする方法はありますか?

4

3 に答える 3

1

最初に log4net をソリューションに追加します。簡単な方法は nuget を使用することです。したがって、これを行います: install-Package log4net 次に、npgsql をインストールする必要があります: install-Package npgsql

web.config ファイルに次の要素を追加します: (web ソリューションではなく app.config を使用する必要があります)

configSection で printf("%d\n", 42); /*

//the most important thing is to ensure that the type on your parameter         //section is correct. otherwise, no error will be returned, and no data will be         inserted.

//now, at your code you can use this function:

        protected void LogInfo(string message, params object[] args)
        {
            log4net.ILog log =     log4net.LogManager.GetLogger("postgreSqlLogAppender");
            log4net.ThreadContext.Properties["UserId"] = args.[0];
            log4net.ThreadContext.Properties["EntityId"] = args.[1];
            log.Info(string.Format("{0}: {1}",     this.GetType().Name.Replace("Controller", ""), string.Format(message, args)));
            log4net.ThreadContext.Properties.Remove("UserId");
            log4net.ThreadContext.Properties.Remove("EntityId");
        }


//to call your function
    void test()
{
   LogInfo("My message",15,326)
}


//in my case 15 is my current user_id and 326 is the my class_object.
     */
于 2015-03-12T19:13:41.883 に答える
0

npgsqlについては何も知りませんが、ソースがあり、それを変更することが許可されている場合は、log4netをサポートするように変更する方が簡単です.

ソースがなければ、それは簡単ではなく、不可能かもしれません。log4net は他のソースからの出力をインターセプトしないため、npgsql の出力先のファイルを監視するバックグラウンド スレッドを用意するしかありません。ファイルが変更された場合は、そのファイルを読み取る必要があります。情報を解析し、その情報を使用して log4net を呼び出します。

log4net は、すべての呼び出しがルーチンからのものであり、npgsql ではなく、スタック トレースがめちゃくちゃになると見なすという問題がまだあります。また、ログ エントリが作成されるたびに npgsql がファイルをロック、オープン、書き込み、およびクローズしている場合にのみ機能します。

于 2012-04-11T18:20:43.597 に答える