2010-04-27 57 views
6

Tôi không chắc chắn đây có phải là diễn đàn phù hợp để đăng câu hỏi này hay không. Nhưng tôi chỉ hy vọng một ai đó ở đây có thể đã sử dụng log4net trong quá khứ, vì vậy hy vọng sẽ nhận được một số trợ giúp.ghi nhật ký log4net không tạo tệp nhật ký

Tôi đang sử dụng log4net để đăng nhập ngoại lệ của mình. Các thiết lập cấu hình giống như thế này:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 
<log4net debug="false"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Logs\sample.log" /> 
    <appendToFile value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="10MB"/> 
    <staticLogFileName value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date %logger.%method[line %line] - %message%newline"/> 
    </layout> 
</appender> 
<root> 
    <level value="INFO"/> 
    <appender-ref ref="RollingLogFileAppender"/> 
</root> 
</log4net> 
</configuration> 

Tôi bắt đầu bằng cách thêm cấu hình này để web.config, nhưng tôi đã nhận ra lỗi (VS Studio không thể tìm thấy một sơ đồ cho log4net- "Không thể tìm thấy thông tin schema cho phần tử log4net "). Vì vậy, tôi đi theo liên kết này (Log4Net "Could not find schema information" messages) và cấu hình cài đặt của tôi trong một tập tin xml riêng biệt và thêm dòng mã sau đây trong tôi AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlfile.xml", Watch = true)] 

Và trong mã thực tế, tôi đặt dòng này:

public void CreateUser(String username, String password) 
{ 
try 
{ 
    log.Info("Inside createuser"); 
    //code for creating user 
} 
catch(exception e) 
{ 
    log.Info("something happened in create user", e); 
} 
} 

Sự cố là tệp nhật ký không được tạo. Tôi không thể thấy bất cứ điều gì bên trong C: \ Nhật ký. Ai có thể cho tôi biết tôi đang làm gì sai ở đây không?

Mọi đề xuất/đầu vào sẽ rất hữu ích.

Cảm ơn mọi người trước.

Trả lời

1

Tệp nhật ký của bạn không được tạo có thể do người dùng ASPNET không có quyền ghi vào thư mục C:\Logs\. Đảm bảo rằng bạn cấp toàn quyền cho ASPNET cho bất kỳ nơi nào mà ứng dụng của bạn muốn tạo tệp nhật ký.

6

tôi không thể có được các thiết lập trong Asembly.cs để làm việc mà không cần thêm này để Application_Start trong Global.asax của tôi:

log4net.Config.XmlConfigurator.Configure(); 
+0

điều này sẽ yêu cầu cấu hình ở trong ứng dụng/web.config –

+0

Không nhất thiết. Phương pháp đó có một số tình trạng quá tải bạn có thể sử dụng. – jvilalta

+0

Tôi hiểu, tôi đã có ấn tượng mà bạn đề nghị sử dụng quá tải mà không có thông số ... –

1

Vì vậy, bạn đang load file cấu hình nhưng sau đó bạn thiết lập các biến log như nên

private static readonly ILog log = LogManager.GetLogger(typeof(Program)); 
+0

Có Tôi đang làm điều này –

0

Trừ khi bạn chỉ định một đường dẫn đầy đủ cho log4net tập tin cấu hình riêng biệt hy vọng các tập tin được trong con đường trả về bởi:

System.AppDomain.CurrentDomain.BaseDirectory 

Nếu bạn có một ứng dụng bảng điều khiển đơn giản, điều này thường có nghĩa là thư mục chứa assembly nhưng điều này không nhất thiết phải đúng trong các trường hợp khác. Có rất nhiều cách để giải quyết vấn đề này (cũng như câu trả lời của tôi here).

Để bắt đầu, việc đặt cấu hình log4net trở lại ứng dụng/web.config dễ dàng hơn và bỏ qua lược đồ cảnh báo. Nếu việc ghi nhật ký hoạt động thì bạn có thể chắc chắn rằng bạn không có vấn đề về quyền và có thể chuyển sang bước tiếp theo để có cấu hình trong một tệp bên ngoài.

Bạn đang viết loại ứng dụng nào? Có lẽ tôi có thể cụ thể hơn một chút với câu trả lời của tôi ...

+0

Cảm ơn bạn đã phản hồi. Tôi đã làm việc với một dịch vụ. Vấn đề được giải quyết ngay bây giờ.Rõ ràng đã có một số vấn đề trong việc cấu hình dịch vụ. Một khi đã được sửa chữa, mọi thứ khác đã hoạt động. –

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