Microsoft企业库无法通过ODBC写入日志

本文关键字:ODBC 日志 企业库 Microsoft | 更新日期: 2023-09-27 18:22:17

在我的应用程序中,MEL设置为使用基于GenericDatabase(ODBC)的数据库侦听器,如下所示:

GenericDatabase db = new GenericDatabase(_connectionString, OdbcFactory.Instance);
TraceListener traceListener = new FormattedDatabaseTraceListener(db, _writeLogStoredProcName, _addCategoryStoredProcName, _formatter);

ODBC已设置为连接到SQL Server驱动程序。"WriteLog"存储过程如下所示:

ALTER PROCEDURE [dbo].[WriteLog]
(
    @EventId int, 
    @Priority int, 
    @Severity nvarchar(32), 
    @Title nvarchar(256), 
    @Timestamp datetime,
    @MachineName nvarchar(32), 
    @AppDomainName nvarchar(512),
    @ProcessID nvarchar(256),
    @ProcessName nvarchar(512),
    @ThreadName nvarchar(512),
    @Win32ThreadId nvarchar(128),
    @Message nvarchar(1500),
    @FormattedMessage ntext,
    @LogId int OUTPUT
)
AS 
    INSERT INTO [LOG] (
        EVENTID,
        PRIORITY,
        SEVERITY,
        TITLE,
        [TIMESTAMP],
        MACHINENAME,
        APPDOMAINNAME,
        PROCESSID,
        PROCESSNAME,
        THREADNAME,
        WIN32THREADID,
        MESSAGE,
        FORMATTEDMESSAGE
    )
    VALUES (
        @EventId, 
        @Priority, 
        @Severity, 
        @Title, 
        @Timestamp,
        @MachineName, 
        @AppDomainName,
        @ProcessID,
        @ProcessName,
        @ThreadName,
        @Win32ThreadId,
        @Message,
        @FormattedMessage)
    SET @LogID = @@IDENTITY
    RETURN @LogID

当我执行以下代码时,我得到一个错误:

LogEntry logEntry = new LogEntry();
logEntry.Message = "Test Message";
logEntry.Priority = 1;
logEntry.Categories.Add("Error");
LogWriter logWriter = GetLogger();
// ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function 'WriteLog' expects parameter '@EventID', which was not supplied.
logWriter.Write(logEntry);

由于某些原因,参数没有传递到我的存储过程中,我通过SQL Server探查器对其进行了验证。当SP被执行时,探查器只显示以下内容:

WriteLog

我还试图更改SP参数的标题,使其具有各种命名,如:@eventid、@eventid、@eventid、@eventid,但都没有成功。

问题出在哪里?

Microsoft企业库无法通过ODBC写入日志

我没有找到任何关于我的问题的信息,所以我最终用Blackjack和hookers创建了自己的自定义日志库。