2016-02-03 18 views
5

Tôi đang sử dụng Serilog với MSSqlServer sink. Mặc dù tôi đã làm theo tất cả các bước được đề cập trong Serilog.Sinks.MSSqlServer nhưng tôi vẫn không thể ghi lại bất kỳ thư nào trong Bảng SQL. Tôi thực sự đánh giá cao nếu bạn có thể cho tôi biết phần nào tôi đã bỏ lỡ hoặc định cấu hình không chính xác?Không thể đăng nhập MS SQL bằng Serilog

Dưới đây là phần mã cấu hình từ dự án của tôi:

public ILogger Logger = null; 

private ColumnOptions _columnOptions = new ColumnOptions 
{ 
    AdditionalDataColumns = new Collection<DataColumn> 
    { 
     new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (Guid) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "CreatedDate",DataType = typeof (DateTime)}, 
     new DataColumn() { AllowDBNull = true, ColumnName = "StatusID",DataType = typeof (byte)}, 
     new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedBy",DataType = typeof (Guid) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedDate",DataType = typeof (DateTime) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "Version",DataType = typeof (Guid) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "SessionID", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "Username", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "IsAuthenticated", DataType = typeof(bool) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "ClientIPAddress", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "ControllerName", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "ActionName", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "GetParameters", DataType = typeof(string) }, 
     new DataColumn() { AllowDBNull = true, ColumnName = "Request", DataType = typeof(string) }, 
    }, 
}; 

Logger = new LoggerConfiguration().WriteTo.MSSqlServer(
       connectionString: ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(), 
       period: TimeSpan.Zero, 
       batchPostingLimit: 5, 
       autoCreateSqlTable: false, 
       tableName: "Logs", 
       restrictedToMinimumLevel: LogEventLevel.Verbose, 
       columnOptions: _columnOptions) 
      .CreateLogger(); 

Đây là mẫu thông điệp mà tôi đang sử dụng:

public const string AuditMessageTemplate = "{SessionID}, {Username}, {IsAuthenticated}, {ClientIPAddress}, {ControllerName}, {ActionName}, {GetParameters}, {Request}, {CreatedBy}, {CreatedDate}, {StatusID}, {ModifiedBy}, {ModifiedDate}, {Version}"; 

Và để thử nghiệm nó tôi viết đoạn mã sau:

for (int i = 0; i < 200; i++) 
{ 
    AuditLogger.Instance.Information(LoggerParameters.AuditMessageTemplate, auditLog.SessionID,auditLog.Username, auditLog.IsAuthenticated, auditLog.ClientIPAddress, auditLog.ControllerName,auditLog.ActionName, auditLog.GetParameters, auditLog.Request, auditLog.CreatedBy, auditLog.CreatedDate, auditLog.StatusID, auditLog.ModifiedBy, auditLog.ModifiedDate, auditLog.Version); 
} 

Dưới đây là một số thông tin thời gian chạy:

locals windows of visual studio

Dưới đây là các hội đồng mà tôi đang sử dụng:

  • Serilog 1.5.0.0
  • Serilog.FullNetFx 1.5.0.0
  • Serilog.Sinks.MSSqlServer 3.0.0.0
+1

Bạn có thể vui lòng kết nối 'SelfLog' và đính kèm bất kỳ đầu ra nào từ đó không? Hướng dẫn tại: https://github.com/serilog/serilog/wiki/Debugging-and-Diagnostics - cảm ơn! –

+0

Nhờ nhận xét của bạn @NicholasBlumhardt Tôi đã tìm ra nguyên nhân gốc rễ và giải quyết vấn đề. Đây là ngoại lệ đã đăng nhập: System.ArgumentException: Hướng dẫn phải chứa 32 chữ số với 4 dấu gạch ngang (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) .Không lưu trữ <"00000000-0000-0000-0000-000000000000"> trong cột CreatedBy. Cảm ơn bạn lần nữa. – DeveloperX

+0

@NicholasBlumhardt Tôi kết nối với nhật ký tự và nó không xuất hiện bất cứ điều gì cả. (Im có cùng một vấn đề). Bất cứ điều gì bạn đã chạy vào? – Sinaesthetic

Trả lời

0

Ngày tốt,

Tôi đã có cùng một vấn đề khi thêm các cột bổ sung vào bảng đăng nhập trong cơ sở dữ liệu của tôi. Những gì tôi tìm thấy là, khi xác định một đối tượng cột dữ liệu của kiểu ngày Guid, nó sẽ không đăng nhập. Khi tôi đã thay đổi kiểu dữ liệu thành chuỗi, nó hoạt động hoàn toàn tốt.

Ví dụ:

new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (Guid) }, 

vs

new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (string) }, 

Tôi biết điều này không phải là lý tưởng, bởi vì tôi quá muốn sử dụng Guid thay vì chuỗi.

Các vấn đề liên quan