エンタープライズライブラリを使用してイベントビューアとデータベースに例外を記録しようとしていますが、イベントビューアの場合、例外を正常に記録できますが、データベースに例外を記録できません。主な問題は、エラーが発生しないことです。エンタープライズコンソールを使用して構成ファイルを作成し、すべてのフィールドをデフォルトのままにしました私のWeb構成セクションは次のようになります
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
source="Enterprise Library Logging" formatter="Text Formatter"
log="SampleLog" machineName="." traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"
filter="All" />
<add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
databaseInstanceName="Sample ADO Connection String" writeLogStoredProcName="WriteLog"
addCategoryStoredProcName="AddCategory" formatter="Text Formatter"
traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" autoFlush="false" name="General">
<listeners>
<add name="Event Log Listener" />
<add name="Database Trace Listener" />
</listeners>
</add>
<add switchValue="All" name="EventLogSample">
<listeners>
<add name="Event Log Listener" />
</listeners>
</add>
<add switchValue="All" name="DBExceptions">
<listeners>
<add name="Database Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Database Trace Listener" />
<add name="Event Log Listener" />
</listeners>
</allEvents>
<notProcessed switchValue="All" name="Unprocessed Category">
<listeners>
<add name="Database Trace Listener" />
</listeners>
</notProcessed>
<errors switchValue="All" autoFlush="false" name="Logging Errors & Warnings">
<listeners>
<add name="Database Trace Listener" />
<add name="Event Log Listener" />
</listeners>
</errors>
</specialSources>
そして私はC#コードでロガーを次のように設定しています
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory());
Logger.SetLogWriter(new LogWriterFactory().Create());
次に、例外を次のようにログに記録します
LogEntry logEntry = new LogEntry();
logEntry.EventId = 100;
logEntry.Priority = 2;
logEntry.Message = "Informational message";
logEntry.Categories.Add("DBExceptions");
Logger.Write(logEntry);
そして、エンタープライズライブラリのデフォルトスクリプトは
sqlcmd -S (localdb)\v11.0 -E -i CreateLoggingDatabase.sql
sqlcmd -S (localdb)\v11.0 -E -i CreateLoggingDatabaseObjects.sql -d Logging
これは、このエラーを実行した後のcmdファイルです。イベントビューアに記録されていますが、データベースに何も記録されていません。(localdb)\ v11.0データベースを確認しようとしました。これらのデフォルトのスクリプト、つまりCreateLoggingDatabaseObjects.sqlとCreateLoggingDatabase.sqlは記録されていないと思います。トリガーされました。親切にこれで私を助けてください、私は多くのアプローチを試しましたが、何も機能せず、eventviewerで完全にログを記録しています。
その後、静かなサーフィンがついに解決策を手に入れました。まず、エンタープライズライブラリによってデータベースにインストールされたログデータベース(localdb)\ v11.0のすべての構造、つまりすべてのテーブルとストアドプロシージャを作成する必要があります。それ以外の場合は、packagesフォルダーのenterpriselibrary.logging.databaseフォルダーでSQLスクリプトを実行することで実現できます。これが完了すると、DBで例外をログに記録する準備が整います。注;例外をログインさせるデータベースにこれらのスクリプトを追加する必要があります
EntLibコンソールを使用してリスナーを構成することもできます。残念ながら、entlibに役立つブログはありません。すぐにそれを進めて手順を共有します。願っています、それは他の人を助けます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加