2014-12-15 9 views
5

Tôi có vấn đề "thú vị", nơi log4net không viết thông điệp tường trình nếu chúng đến từ bên trong một chuỗi công nhân trong ASP.NET MVC. Điều này dường như chỉ là một vấn đề khi tôi đã thêm <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> vào cấu hình log4net của mình và khi trang web đang chạy trên máy chủ của tôi (IIS 8.0). Trên máy tính của riêng tôi log4net đăng nhập các tin nhắn tốt - ngay cả với cấu hình MinimalLock và nếu tôi loại bỏ điều này 'MinimalLock' nó sẽ đăng nhập thông điệp trong chủ đề công nhân trên máy chủ là tốt.log4net không đăng nhập các chuỗi công việc với mô hình MinimalLock

Dưới đây là một ví dụ:

public class MvcApplication : System.Web.HttpApplication 
{ 
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(
     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    protected void Application_Start() 
    { 

     // This is logged just fine - with or without MinimalLock, 
     // both local and on server 
     log.Info("Logging ouside worker!"); 

     // This is only logged without MinimalLock configured 
     // if the site is hosted on my server runnning IIS 8.0. 
     var thread = new Thread(() => log.Info("Logging inside worker!")); 
     thread.Start(); 
    } 

} 

và đây là cấu hình log4net tôi:

<log4net> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="App_Data\log.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
    </layout> 
    </appender> 
</log4net> 

Nếu không có sự MinimalLock lockingModel cấu hình, tôi không thể đọc các tập tin đăng nhập trên máy chủ, vì vậy loại bỏ nó không thực sự là một lựa chọn. Tôi cũng không thể tránh đăng nhập bên trong các chuỗi công nhân, vì tôi cần phải đăng nhập các lỗi tiềm ẩn bên trong các công nhân sinh ra bởi Quartz.net.

Tôi nghi ngờ đó là vấn đề quyền trên máy chủ nhưng tôi có quyền truy cập rất hạn chế vào máy chủ, vì tôi không phải là quản trị viên (về cơ bản tôi chỉ có quyền truy cập FTP - họ thậm chí sẽ không cấp cho tôi quyền truy cập bên ngoài vào DB MSSQL).

Dưới đây là câu hỏi

Nếu nghi ngờ của tôi là đúng, những gì thay đổi tôi nên yêu cầu từ quản trị viên máy chủ của tôi để sửa chữa vấn đề này? Những quyền nào sẽ được cấp cho người dùng nào, để cho MinimalLock hoạt động bình thường trong môi trường lưu trữ của tôi?

Nếu đó không phải là vấn đề với quyền, thay vào đó nó có thể là gì?

Bất kỳ giúp đỡ được nhiều đánh giá cao. Cảm ơn trước.

Cập nhật:

Sau khi kích hoạt bản ghi gỡ lỗi cho log4net, tôi thấy các lỗi sau đây khi tôi chạy mã ví dụ trên (đường dẫn đầy đủ bỏ qua):

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file App_Data\log.log. Access to the path 'App_Data\log.log' is denied. 
log4net:ERROR [RollingFileAppender] Unable to acquire lock on file App_Data\log.log. Access to the path 'App_Data\log.log' is denied. 
log4net:ERROR [RollingFileAppender] Unable to acquire lock on file App_Data\log.log. Access to the path 'App_Data\log.log' is denied. 
log4net: ConfigureAndWatchHandler: Changed [web.config] 
log4net: ConfigureAndWatchHandler: Changed [web.config] 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository] 
log4net:ERROR [RollingFileAppender] Unable to acquire lock on file App_Data\log.log. Access to the path 'App_Data\log.log' is denied. 
log4net:ERROR [RollingFileAppender] Could not close writer [log4net.Util.CountingQuietTextWriter] 
log4net.Appender.FileAppender+LockingStream+LockStateException: The file is not currently locked 
    at log4net.Appender.FileAppender.LockingStream.AssertLocked() 
    at log4net.Appender.FileAppender.LockingStream.Flush() 
    at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) 
    at System.IO.StreamWriter.Dispose(Boolean disposing) 
    at System.IO.StreamWriter.Close() 
    at log4net.Util.QuietTextWriter.Close() 
    at log4net.Appender.TextWriterAppender.CloseWriter() 

Những chỉ xảy ra trên máy chủ.

+1

Như có lẽ bạn có đủ quyền truy cập máy chủ để thay đổi cấu hình trang web lo4net và có thể tạo một file debug log (hoặc yêu cầu một), sau đó bạn có thể [thiết lập chế độ gỡ lỗi nội log4net để đăng nhập vào một tập tin trên máy chủ] (http : //logging.apache.org/log4net/release/faq.html#internalDebug) - điều này có thể cho biết một số dấu hiệu của vấn đề cơ bản. – stuartd

+0

Cảm ơn bạn. Tôi vừa thử và tìm thấy một vài lỗi trong nhật ký log4net. Tôi không chắc cách giải quyết chúng. Tôi đã cập nhật câu hỏi của mình với các thông báo lỗi. –

Trả lời

1

Tôi đã cố gắng giải quyết vấn đề.

Trong môi trường lưu trữ của tôi, chuỗi công việc được liên kết với một danh tính cửa sổ khác với cha mẹ của họ. Danh tính được sử dụng bởi các chủ đề công nhân chỉ có quyền đọc trên thư mục App_Data/Logs của tôi. Khi quyền truy cập của tôi vào máy chủ bị hạn chế, tôi đã tạo tệp .cshtml để lập trình thêm ghi và sửa đổi quyền đối với danh tính của chuỗi công việc.

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