#c# #serilog
#c# #serilog
Вопрос:
Я пытаюсь добавить дополнительный столбец в свой журнал регистрации на SQL Server. В примерах они дают нечто очень похожее на следующее:
var columnOptions = new ColumnOptions
{
AdditionalDataColumns = new Collection<SqlColumn>
{
new SqlColumn { DataType = SqlDbType.NVarChar, DataLength = 20, ColumnName = "B" }
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что мой компилятор продолжает жаловаться на SqlColumn
использование типа, говоря, что он неизвестен. Я использую .Net 4.6.1. Что мне нужно добавить к моему использованию? У меня уже есть следующее:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.IdentityModel.Tokens;
using System.Linq;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;
using System.Net.Http.Formatting;
using Dapper;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Jwt;
using Newtonsoft.Json.Serialization;
using Owin;
using Serilog;
using Serilog.Filters;
using Serilog.Sinks.MSSqlServer;
using SerilogWeb.Classic.WebApi;
Редактировать
Я только что попытался создать совершенно новый проект web api, и следующий код также не будет работать, по какой-то причине я не могу получить доступ к типу SqlColumn. Обратите внимание, что ошибка заключается в том, что тип не существует в пространстве имен (это не ошибка из-за конструктора).
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Owin;
using Owin;
using Serilog;
using Serilog.Sinks.MSSqlServer;
[assembly: OwinStartup(typeof(TestProject.Startup))]
namespace TestProject
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
var x = new Serilog.Sinks.MSSqlServer.SqlColumn();
}
}
}
Комментарии:
1. Он определен в Serilog. Приемники. Пространство имен MSSqlServer в соответствии с источником: github.com/serilog/serilog-sinks-mssqlserver/blob/… У вас есть правильный Nuget? Может быть, это nuget.org/packages/Serilog . Приемники. MSSqlServer/ 5.1.2 ?
2. @mortb, я даже пытался указать это явно, и это выдает ошибку
The type or namespace name 'SqlColumn' does not exist in the namespace 'Serilog.Sinks.MSSqlServer' (are you missing an assembly reference?)
3. Кроме того, я использую версию пакета NuGet 5.1.2
4. Единственные доступные классы, которые я вижу в Serilog. Приемники. К числу MSSqlServer относятся следующие: ColumnOptions, MSSqlServerAuditSink, MSSqlServerSink, StandardColumn и XmlPropertyFormatter.
Ответ №1:
Вам нужно будет обновить Serilog.Приемники.MSSqlServer переведен в предварительную версию 5.1.3-dev-00232, поскольку она не существует в версии 5.1.2
Install-Package Serilog.Sinks.MSSqlServer -Version 5.1.3-dev-00232
Или вы можете добавить столбец, используя DataColumn
type в версии 5.1.2, как показано ниже
var columnOptions = new ColumnOptions
{
AdditionalDataColumns = new Collection<DataColumn>
{
new DataColumn {DataType = typeof (string), ColumnName = "User"},
new DataColumn {DataType = typeof (string), ColumnName = "Other"},
}
};
var log = new LoggerConfiguration()
.WriteTo.MSSqlServer(@"Server=.SQLEXPRESS;Database=LogEvents;Trusted_Connection=True;", "Logs", columnOptions: columnOptions)
.CreateLogger();