2013-04-17 36 views
6

Khi bắt đầu dịch vụ cửa sổ của tôi với thông tin "NT AUTHORITY \ NETWORK SERVICE", tôi gặp sự cố lạ với NLog: đơn giản là không ghi bất kỳ thứ gì vào mục tiêu tệp nếu tên tệp chứa dấu chấm.NLog không ghi vào tệp mục tiêu có tên chấm chứa tên

Tôi đang chạy cửa sổ dịch vụ trên WinServer tôi 2008 R2 Standard kích hoạt .NET Framework 3.5 SP1 tính năng, NLog.config được như sau:

<targets> 
    <target xsi:type="File" 
    name="f" 
    fileName="${basedir}/logs/${shortdate}.txt" 
    encoding="utf-8" 
    concurrentWrites="true" 
    keepFileOpen="false" 
    layout="${longdate} ${uppercase:${level}} ${message}"/> 
</targets> 
<rules> 
    <logger name="*" minlevel="Trace" writeTo="f" /> 
</rules> 

Sau khi một số googling và thử nghiệm với cấu hình tôi đã đưa ra một cách giải quyết bằng cách không bao gồm phần mở rộng tập tin trong tham số fileName và nó làm việc tốt, mà giải quyết vấn đề nhưng không giống như một giải pháp phong nha.

Và điều khiến cho vấn đề trông giống như một ma thuật kỳ lạ đối với tôi là tôi đã giải quyết vấn đề với phần mở rộng tệp nhật ký trong cấu hình dịch vụ cửa sổ thứ hai của tôi (đang chạy trên cùng một máy với cùng một máy credenials) đơn giản bằng cách thay đổi thông tin lắp ráp trong các tùy chọn dự án.

Bất kỳ ý tưởng nào?

Trả lời

13

Sau khi kích hoạt tập tin log nội NLog của

<nlog 
    internalLogFile="c:\temp\nlogproblems.txt" 
    throwExceptions="true" 
    xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

tôi quản lý để bắt UnathorizedAccessException

2013-04-17 11:06:14.0445 Error Exception in asynchronous handler 
    NLog.NLogRuntimeException: Exception occurred in NLog ---> 
    System.UnauthorizedAccessException: Access is denied. 
    (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

dẫn đến một kết luận rằng tôi nên sửa chữa các logs điều khoản thư mục.

Cuối cùng không có ma thuật kỳ lạ, tôi chỉ phải cho phép NETWORK SERVICE ghi vào thư mục logs.

0

trong trường hợp của tôi, đó là người dùng đang chạy hồ bơi ứng dụng.

có vẻ như điều đó với một số trường hợp, bạn cần sử dụng cụ thể, trường hợp của tôi được chạy một IHttpHandler và có mehtods khác tôi đã gọi từ ProcessRequest và đối với một số lý do từ ProcessRequest bản thân nó đã làm việc tốt nhưng từ submethods tôi đã nhận

Exception in asynchronous handler 
    NLog.NLogRuntimeException: Exception occurred in NLog ---> 
    System.UnauthorizedAccessException: Access is denied. 
    (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

và sau khi đọc 7kun câu trả lời tôi đã cho tất cả mọi người toàn quyền kiểm soát và nó làm việc, và sau đó thay đổi để tìm ra người dùng còn thiếu thực

+0

Xin chào, bạn có thể vui lòng cho tôi biết làm thế nào bạn cho tất cả mọi người toàn quyền kiểm soát? – tabby

+0

xem hướng dẫn này, https://www.youtube.com/watch?v=ytmYVbMEsGg và thay vì loại người dùng cụ thể "Mọi người" – bresleveloper