1. ホーム
  2. .net

[解決済み] log4netをゼロからプログラムによって設定する方法(ノーコンフィグ)

2023-04-17 01:34:26

質問

これはバッドアイディアだと思いますが、、、。 私は、設定ファイルなしでゼロからプログラム的に log4net を設定したいです。私は私と私のチームのために、私たちが担当している比較的小さな部門アプリケーションの束のために使用する簡単なロギングアプリケーションに取り組んでいます。私は、それらすべてが同じデータベースにログを記録することを望んでいます。ロギングアプリケーションは、AdoNetAppenderが事前に設定されたlog4netのラッパーにすぎません。

すべてのアプリケーションは ClickOnce でデプロイされ、設定ファイルをデプロイする際に小さな問題を提示します。設定ファイルがコア プロジェクトの一部であった場合、そのプロパティを設定して、アセンブリと共にデプロイすることができました。しかし、それはリンクされたアプリケーションの一部なので、メインのアプリケーションと一緒にデプロイするオプションはありません。(それが真実でない場合、誰か私に知らせてください)。

おそらくそれが悪い考えであるため、ゼロから log4net をプログラム的に構成するための利用可能なサンプル コードはあまりないようです。以下は、私がこれまでに持っているものです。

Dim apndr As New AdoNetAppender()
apndr.CommandText = "INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)"
apndr.ConnectionString = connectionString
apndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
apndr.CommandType = CommandType.Text
Dim logDate As New AdoNetAppenderParameter()
logDate.ParameterName = "@log_date"
logDate.DbType = DbType.DateTime
logDate.Layout = New RawTimeStampLayout()
apndr.AddParameter(logDate)
Dim logLevel As New AdoNetAppenderParameter()
logLevel.ParameterName = "@log_level"
'And so forth...

の全てのパラメータを設定した後 apndr のすべてのパラメータを設定した後、まずこれを試してみました。

Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy)
hier.Root.AddAppender(apndr)

うまくいかなかった。そこで、一発逆転の発想で、代わりにこれを試してみました。

BasicConfigurator.Configure(apndr)

これもうまくいきませんでした。どなたか、設定ファイルなしでゼロからプログラムでlog4netを設定する方法について、良いリファレンスをお持ちではないでしょうか?

どのように解決するのですか?

私が過去に行った方法のひとつは、設定ファイルを埋め込みリソースとしてインクルードすることであり、単に log4net.Config.Configure(Stream) .

この方法で、私は使い慣れた設定構文を使うことができ、ファイルをデプロイすることを心配する必要はありませんでした。