开发者

Insert Guid with NLOG

I am getting the error

Exception occurred in NLog ---> System.Data.SqlClient.SqlException: Conversion failed when converting from a character string to uniqueidentifier.

when I try to insert a NULL in the UserId column of the table which can take NULLS.

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true" internalLogFile="C:\Development\Projects\Pearson\ARIES\Development\Websites\ARIES.Web\NLog.log" internalLogLevel="Debug" >

    <!-- make sure to set 'Copy To Output Directory' option for this file -->
    <!-- go to http://nlog-project.org/wiki/Configuration_file for more information -->

    <targets>
        <target xsi:type="AsyncWrapper" queueLimit="2000" overflowAction="Grow" name="AsyncWrapperLogger" batchSize="1000">
            <target xsi:type="Database"
                    name="Database"
                    connectionStringName="ApplicationServices">
                <commandText>
                    insert into Logs(UserId, Level, Message, Exception, StackTrace, DateCreated) values(CASE WHEN @UserId IS NOT NULL AND @UserId = CAST('00000000-0000-0000-0000-000000000000' AS uniqueidentifier) THEN @UserId ELSE @UserId END, @Level, @Message, @Exception, @StackTrace, @DateCreated);
                </commandText>
                <parameter name="@UserId" layout="${event-context:item=${guid:format=UserId}}"/>
                <parameter name="@Level" layout="${level}"/>
                <parameter name="@Message" layout="${message}"/>
                <parameter name="@Exception" layout="${exception}"/>
                <parameter name="@StackTrace" layout="${stacktrace}"/>
                <parameter name="@DateCreated" layout="${date}"/>
            </target>
        </target>
    </targets>

    <rules>
        <logger name="*" writeTo="Database"/>
    </rules>
</nlog>

public static void Write(string message, Exception ex)
        {
            var logEventInfo = new LogEventInfo(NLog.LogLevel.Error, "", message);

            if (HttpContext.Current != null)开发者_开发技巧
            {
                logEventInfo.Properties.Add("UserId", Guid.NewGuid());
            }

            logEventInfo.Exception = ex;

            logger.Log(logEventInfo);
        }


Fixed it by using SQL Profiler. It was sending an empty string for the null GUID.

insert into Logs(UserId, Level, Message, Exception, StackTrace, DateCreated) values(CASE WHEN @UserId = '' THEN NULL ELSE convert(uniqueidentifier, @UserId) END, @Level, @Message, @Exception, @StackTrace, @DateCreated);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜