2013-06-19 37 views
18

Tôi đang cố gắng để có được NLog viết thư cho một cơ sở dữ liệu, tuy nhiên với mã hiện tại của tôi nó ném một ngoại lệ khi tôi cố gắng để gỡ lỗi, ngoại trừ là: Loại initializer cho 'NotifyIcon.Program' ném một ngoại lệ.Làm cách nào để định cấu hình NLog để ghi vào cơ sở dữ liệu?

NLog mã tập tin cấu hình của tôi là dưới đây, vì điều này dường như được gây ra vấn đề vì nó là mã duy nhất tôi đã thay đổi.

<?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" autoReload="true"> 

    <!-- 
    See http://nlog-project.org/wiki/Configuration_file 
    for information on customizing logging rules and outputs. 
    --> 
    <targets> 
    <!-- add your targets here --> 

    <target name="database" xsi:type="Database" /> 
    <target xsi:type="Database" 
      name="String" 
      dbUserName="Layout" 
      dbProvider="sqlserver" 
      useTransactions="false" 
      connectionStringName="String" 
      connectionString="Data Source=AC-02\SQLEXPRESS;Initial Catalog=master;Integrated Security=True" 
      keepConnection="true" 
      dbDatabase="Layout" 
      dbPassword="Layout" 
      dbHost="Layout" 
      installConnectionString="Layout" 
      commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values @MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart "/> 

    </targets> 

    <rules> 

    <logger name="*" minlevel="Trace" writeTo="database" /> 

    </rules> 
</nlog> 

bất kỳ và tất cả các trợ giúp sẽ được đánh giá cao =]

+0

Tôi không có chuyên môn trong việc này, nhưng trên cái nhìn đầu tiên nó xuất hiện rằng lỗi mà bạn đang nhận được không liên quan đến tập tin này. Nếu bạn thay đổi tập tin này trở lại những gì nó được, không mã của bạn hoạt động? – abhinav

+0

Có, tôi đã quản lý để Nlog ghi vào một tệp văn bản chuẩn, Tuy nhiên, khi tôi thay đổi tệp cấu hình ở trên nó ném một ngoại lệ, điều này khá vô ích như tất cả nó nói với tôi là một ngoại lệ được đưa ra –

+0

mẹo gỡ lỗi khác, nếu bạn chạy truy vấn của mình trong văn bản lệnh, trên DB độc lập, thông qua bảng điều khiển, nó có hoạt động không? – abhinav

Trả lời

12

Bạn dường như thiếu thông số được chèn vào.

Xem các ví dụ tại http://justinpdavis.blogspot.com/2010/04/logging-to-database-with-nlog.html

Các trang web nLog không làm cho nó rất rõ ràng rằng đây là những yêu cầu, nhưng nếu bạn nheo mắt đôi mắt của bạn và đọc https://github.com/nlog/NLog/wiki/Database-target bạn nên thấy rằng họ được yêu cầu.

+0

cảm ơn, điều này rất hữu ích liên quan đến cú pháp đúng trong tệp nlog.config, tôi đã giải quyết vấn đề thankyou rất nhiều =] –

0

Vì vậy, bạn có nghĩa là, nếu bạn chạy truy vấn của bạn trên DB của bạn, sử dụng DB console, với dữ liệu mẫu, bạn nhận được một lỗi. Nếu có, thì vấn đề nằm trong lược đồ DB nơi bạn muốn đăng nhập. bạn đang cố gắng để chèn một dữ liệu vào DB mà không phù hợp với sơ đồ của nó

+0

có thể liên kết này sẽ giúp ích. http://geekswithblogs.net/jkrebsbach/archive/2012/02/23/type-initializer-for-classname-threw-an-exception.aspx – abhinav

1

Nó trông giống chuỗi chèn của bạn không theo định dạng đúng không? Bạn đang thiếu() xung quanh danh sách tham số.

commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values (@MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart) " 
+0

Tôi đã sửa mã của mình tuy nhiên ngoại lệ vẫn bị ném, nhờ sự trợ giúp btw =] –

0

U cũng viết 2 mục tiêu. Và cũng có rất nhiều thuộc tính mà bạn không cần phải đặt. Chỉ nên là:

<target name="DbLog" xsi:type="Database" connectionString="YourConStr" 
     commandText="insert into [blablablabal] (Col1) values (@val1)"> 
    <parameter name="@val1" layout="${level}" /></target> 

Điều gì đó tương tự. Dễ dàng không? :)

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