C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ADONetAppenderによるDBへのログ出力ができない


(過去ログ 107 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■63580 / inTopicNo.1)  ADONetAppenderによるDBへのログ出力ができない
  
□投稿者/ 悩み多きランナー (3回)-(2012/09/08(Sat) 22:57:17)

分類:[C#] 

2012/09/08(Sat) 23:09:07 編集(投稿者)
2012/09/08(Sat) 23:03:09 編集(投稿者)

度々お世話になります。

log4netを使用してSQLServerのテーブルへログを書き込みしたいのですが
log4net.configファイルに下記の記述しデバック実行するとデバッグ箇所に
「log4net:ERROR XmlHierarchyConfigurator: No appender named [AdoNetAppender] could be found.」
「log4net:ERROR XmlHierarchyConfigurator: Appender named [AdoNetAppender] not found.」
が出力されSQLServerへログの書き込みができません。
何が原因か判明しましたらご教授お願い致します。

ちなみにLogFileAppenderの方は問題なく出力できることは確認できました。

------------------------------------------------------------------------------------------------------------------------------------------------------------
・log4net.config(対象箇所のみ抜粋)
※SQLServerへのログインはWindows認証でサーバ名は接続文字列に書いているXXXXX-PC
 テーブルはmaster配下に「dblog」という名前で作成しカラムは「message」項目のみで属性はNVACHAR(100)


<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="0" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />


<!-- 接続文字列 -->
<connectionString value="Server=XXXXX-PC;Integrated Security=SSPI;Initial Catalog=master;Trusted_Connection=true;"/>

<!-- INSERT文を指定 -->
<commandText value="INSERT INTO dblog ([Message]) VALUES (@message)" />

<!-- カラム情報 -->
<parameter>
<!-- INSERT文に含まれるパラメータ -->
<parameterName value="@message" />
<dbType value="String" />
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<!-- パターンを指定 -->
<conversionPattern value="%message" />
</layout>
</parameter>
</appender>

<root>
<level value="ALL" />
<!-- LogFileAppenderを使用する場合 はコメントアウトをはずす -->
<appender-ref ref="LogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
--------------------------------------------------------------------------------------------------------------------------------------

以上よろしくお願い致します。</pre></pre>
引用返信 編集キー/
■63582 / inTopicNo.2)  Re[1]: ADONetAppenderによるDBへのログ出力ができない
□投稿者/ オショウ (15回)-(2012/09/09(Sun) 01:24:56)
> log4netを使用してSQLServerのテーブルへログを書き込みしたいのですが
> log4net.configファイルに下記の記述しデバック実行するとデバッグ箇所に
> 「log4net:ERROR XmlHierarchyConfigurator: No appender named [AdoNetAppender] could be found.」
> 「log4net:ERROR XmlHierarchyConfigurator: Appender named [AdoNetAppender] not found.」
> が出力されSQLServerへログの書き込みができません。
> 何が原因か判明しましたらご教授お願い致します。

  その通りなんですが・・・

  宣言は、『ADONetAppender』となっていますが、『AdoNetAppender』と指定して
  いますので、『not Found』と・・・

  大文字・小文字の区別がありますので、正確に記述して下さい。

※ 尚、log4net.config や、AssemblyInfo.cs に記載しなくても、プログラムのコード中
  で、すべて設定できます。

  たとえば・・・

Public Function OpenLog4netDB(ByVal Server As String, ByVal DbName As String, Optional ByVal bSecurity As Boolean = True, Optional ByVal User As String = "", Optional ByVal Pass As String = "", Optional ByVal Timeout As Integer = 5) As Boolean

Dim h As Hierarchy = CType(LogManager.GetRepository, Hierarchy)

h.LoggerFactory.CreateLogger("logger")

Dim logger As Logger

logger = h.GetLogger("logger", h.LoggerFactory)

Dim layout As log4net.Layout.PatternLayout = New log4net.Layout.PatternLayout

layout.ConversionPattern = "%d %-5p - %m%n"
layout.ActivateOptions()

Dim Para As AdoNetAppenderParameter
Dim appender As AdoNetAppender = New AdoNetAppender

With appender
.Name = "Database"
.ConnectionType = "System.Data.SqlClient.SqlConnection"
.ConnectionString = GetDBConnectString(Server, DbName, bSecurity, User, Pass, Timeout)
.CommandType = CommandType.Text
.CommandText = "INSERT INTO LOG_DATA ([Date],[Level],[Message]) VALUES (@log_date, @log_level, @message)"
.Layout = layout
.Threshold = Core.Level.All
.BufferSize = 100

Para = New AdoNetAppenderParameter
With Para
.ParameterName = "@log_date"
.DbType = DbType.DateTime
.Layout = New Layout.RawTimeStampLayout
appender.AddParameter(Para)
End With

Para = New AdoNetAppenderParameter
With Para
.ParameterName = "@log_level"
.DbType = DbType.String
.Size = 50
.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%p"))
appender.AddParameter(Para)
End With

Para = New AdoNetAppenderParameter
With Para
.ParameterName = "@message"
.DbType = DbType.String
.Size = 4000
.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%m"))
appender.AddParameter(Para)
End With

.ActivateOptions()
End With

logger.AddAppender(appender)
logger.Level = Level.All

BasicConfigurator.Configure(h, appender)

log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

bOpen = True

Return bOpen

End Function

Public Function Close() As Boolean

If bOpen Then
log4net.LogManager.Shutdown()
End If

bOpen = False

Return True

End Function

Private Function GetDBConnectString(ByVal Server As String, ByVal DbName As String, ByVal bSecurity As Boolean, ByVal User As String, ByVal Pass As String, ByVal Timeout As Integer) As String

Dim AdoSQL As SqlConnectionStringBuilder

AdoSQL = New SqlConnectionStringBuilder

With AdoSQL
.DataSource = Server
.InitialCatalog = DbName
.IntegratedSecurity = bSecurity
.Password = Pass
.UserID = User
.ConnectTimeout = Timeout
End With

Return AdoSQL.ToString

End Function

  あくまで参考です。ご自身の環境用に変更しないと動作しないでしょう。
  ログを保存するDBのテーブル構造も・・・です。

以上。
引用返信 編集キー/
■63594 / inTopicNo.3)  Re[2]: ADONetAppenderによるDBへのログ出力ができない
□投稿者/ 悩み多きランナー (5回)-(2012/09/09(Sun) 16:56:05)
オショウさん

回答ありがとうございます。configファイルをの大文字の箇所を
小文字に修正することでSQLServerにログ内容が出力されました。

その上、ソースファイルに直接記述するサンプルまでいただき
本当にありがとうございます。


引用返信 編集キー/
■63595 / inTopicNo.4)  Re[3]: ADONetAppenderによるDBへのログ出力ができない
□投稿者/ 悩み多きランナー (6回)-(2012/09/09(Sun) 17:08:35)
No63594 (悩み多きランナー さん) に返信
> オショウさん
>
> 回答ありがとうございます。configファイルをの大文字の箇所を
> 小文字に修正することでSQLServerにログ内容が出力されました。
>
> その上、ソースファイルに直接記述するサンプルまでいただき
> 本当にありがとうございます。
>
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -