Захватывает ли Serilog журнал автоматически при настройке уровня журнала

Когда я столкнулся с этой ошибкой в ​​Visual Studio,

«При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть соединение с SQL Server) »

... это было во время выполнения следующего кода C #, который пытался получите данные SQL Server, чтобы отобразить их в сетке. Разрыв произошел именно в строке, которая говорит connect.Open ():

        using (var connect = Connections.mySqlConnection)
        {
            const string query = "SELECT Name, Birthdate, Narrative FROM Friends";
            using (var command = new SqlCommand(query, connect))
            {
                connect.Open();
                using (var dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // blah
                    }
                }
            }
        }

Это было необъяснимо, потому что SQL-запрос был очень простым, у меня была правильная строка подключения, и сервер базы данных был доступен. Я решил запустить сам SQL-запрос вручную в SQL Management Studio, и он прошел отлично и дал несколько записей. Но в результатах запроса оставалось одно: в тексте типа «varchar (max) в таблице« Друзья »был некорректно закодированный текст HTML (в частности, некоторые закодированные символы комментариев сортировки <!--, помещенные в данные столбца« Повествование » ). Строка подозрительных данных выглядела так:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    &lt;!--HTML Comment -->Once upon a time...

Обратите внимание на кодированный HTML-символ «&lt;», который означал «& lt;» персонаж. Как-то это пробилось в базу данных, и мой код на C # не смог его забрать! Он провалился каждый раз прямо на линии connect.Open ()! После того, как я вручную отредактировал эту одну строку данных в таблице базы данных «Друзья» и поместил в декодированный «& lt;» характер, все сработало! Вот как должна выглядеть эта строка:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    <!--HTML Comment -->Once upon a time...

Я отредактировал одну плохую строку, которую я использовал, используя этот простой оператор UPDATE ниже. Но если у вас было несколько нарушающих строк закодированного HTML, вам может понадобиться более сложная инструкция UPDATE, которая использует функцию REPLACE:

UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '&lt%'

Итак, мораль истории (по крайней мере, в моем случае) , дезинфицируйте свой HTML-контент, прежде чем хранить его в базе данных, и вы не получите эту загадочную ошибку SQL Server в первую очередь! (Ну, правильная дезинфекция / декодирование вашего HTML-контента является предметом другого обсуждения, достойного отдельного поиска StackOverflow, если вам нужна дополнительная информация!) [/ ​​G6]

0
задан Kirk Larkin 28 March 2019 в 08:41
поделиться

1 ответ

При вызове AddSerilog в ConfigureServices регистрируется поставщик услуг регистрации в Microsoft ILoggingBuilder . Этот провайдер ( SerilogLoggerProvider ) реализует метод ILoggerProvider и его метод CreateLogger, который выглядит следующим образом:

public ILogger CreateLogger(string name)
{
    return new SerilogLogger(this, _logger, name);
}

Это ясно из этого кода что Serilog SerilogLogger реализует интерфейс Microsoft ILogger.

Когда платформе ASP.NET Core требуется создать объект регистратора, она использует реализации ILoggerProvider для создания экземпляров ILogger, вызывая CreateLogger. При наличии зарегистрированного поставщика Serilog это заканчивается тем, что ASP.NET Core запрашивает экземпляр ILogger и получает экземпляр SerilogLogger, который обеспечивает мост между ASP.NET Core и Serilog.

Приемник RollingFile сам создает сконфигурированный файл журнала автоматически каждый раз, когда генерируется событие журнала, со своей собственной логикой для создания файлов с метками времени и т. Д., Соответственно.

0
ответ дан Kirk Larkin 28 March 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: