Вставьте Guid с NLOG - PullRequest
       7

Вставьте Guid с NLOG

1 голос
/ 04 августа 2011

Я получаю сообщение об ошибке

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

при попытке вставить NULL в столбец UserId таблицы, который может принимать значения 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);
        }

1 Ответ

2 голосов
/ 04 августа 2011

Исправлено с помощью SQL Profiler.Он отправлял пустую строку для нулевого 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);
...