2010-07-01 39 views
14

Tôi không thể ghi vào nhật ký sự kiện bằng NLog. Tôi đã có thể ghi vào bàn điều khiển và vào một tập tin. Tôi đã bật ngoại lệ trong NLog và không nhận được phản hồi từ NLog.NLog: không thể ghi vào nhật ký sự kiện

Đây là NLog.config tô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" 
     throwExceptions="true"> 
    <targets> 
     <target name="console" xsi:type="Console" layout="${message}" /> 
     <target xsi:type="EventLog" name="eventlog" layout="${message}" log="Application" source="aaaTest"/> 
     <target xsi:type="File" fileName="log.txt" name="file"/> 
    </targets> 

    <rules> 
     <logger name="*" minlevel="Debug" writeTo="eventlog,console,file" /> 
    </rules> 
</nlog> 

Trong Event Viewer, tôi nhìn vào "Event Viewer (địa phương)"> "Windows Logs"> "Ứng dụng". Tuy nhiên, tôi không thấy trường hợp "aaaTest" (nguồn được xác định của tôi) trong nhật ký.

+0

Nếu tôi chạy ứng dụng của tôi như quản lý, các thông điệp bản ghi sẽ hiển thị một cách chính xác trong các bản ghi sự kiện. Tôi đang sử dụng Windows 7. Không có cách nào khác để ghi vào sổ ghi sự kiện trừ khi tôi chạy ứng dụng của tôi với tư cách là quản trị viên? (Tôi tình cờ gặp bài viết này đã cho tôi ý tưởng thử chạy với tư cách quản trị viên: http://webcache.googleusercontent.com/search?q=cache:8pYpa9wBFTEJ:connect.microsoft.com/VisualStudio/feedback/details/509224/security -exception-trying-to-access-application-event-log + my.application.log + securityexception & cd = 1 & hl = vi & ct = clnk & gl = us & client = firefox-a) – sparks

Trả lời

18

Từ nlog forum post

Để có thể viết thư cho EventLog một ứng dụng phải được đăng ký như là một nguồn sự kiện. Nếu bạn chạy VS với tư cách quản trị viên, điều này sẽ diễn ra tự động. Nếu bạn tạo một trình cài đặt và cài đặt ứng dụng của bạn, nó sẽ được đăng ký.

Để đăng ký một ứng dụng bằng tay như là nguồn sự kiện tôi sử dụng kịch bản sau đây:

Set Args = WScript.Arguments 
If Args.Count < 1 then 
    WScript.Echo "USAGE: CreateEventSource.vbs <EventSourceName>" 
    WScript.Quit 
End If 
EventSourceName = Args(0) 

Set WshShell = WScript.CreateObject("WScript.Shell") 

'Create event source 
KeyName = "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application\" & EventSourceName & "\EventMessageFile" 
'Change path to .NET Framework version used 
WshShell.RegWrite KeyName,"%windir%\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll", "REG_EXPAND_SZ" 
+1

Thay vì sử dụng VBS, sử dụng dòng lệnh này thay thế. Dễ dàng hơn nhiều. http://stackoverflow.com/questions/446691/how-to-create-windows-eventlog-source-from-command-line/1036133#1036133 "eventcreate/ID 1/L ĐƠN/T THÔNG TIN/SO MYEVENTSOURCE/D "Nhật ký đầu tiên của tôi" –

+0

Tôi phát hiện ra rằng bạn chỉ phải chạy VS với tư cách là quản trị viên một lần và tạo Nhật ký sự kiện trong khi thực hiện điều đó. . – SharpC

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