2010-01-07 36 views
5

Tôi đang sử dụng log4net và đã thiết lập hoàn toàn nó với tên param = "File" value = "C: \ Application.log". Tuy nhiên, các tập tin không được tạo ra trong C :. Tôi đang chạy Windows 7 và có thể một cái gì đó như quyền truy cập là ngăn chặn các tập tin được tạo ra.Tệp nhật ký không được tạo?

Đây là App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" /> 
    </configSections>` 

    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender“ type=“log4net.Appender.RollingFileAppender" > 
     <param name="File" value="C:\Users\Mohit\Documents\Application.log" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern“ value=“%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Trả lời

7

Bạn phải cung cấp tên tệp thực. Những gì bạn đã xác định trong cấu hình của mình là tên thư mục. Thay vì:

<param name="File" value="C:\Users\Mohit\Documents" /> 

sử dụng một cái gì đó như:

<param name="File" value="C:\Users\Mohit\Documents\log.txt" /> 

Ngoài ra, có thể bạn sẽ cần quyền truy cập cao cho các ứng dụng của bạn để viết nhật ký cho c root: thư mục. UAC sẽ không cho phép bạn ghi vào thư mục gốc.

Giống như Andy nói, bạn sẽ được tốt hơn để lựa chọn một số thư mục con của thư mục người dùng Windows như:

c:\Users\Mohit\AppData\Local\<MyApplication> 

log4net có một số biến được xác định trước, bạn có thể sử dụng để nhắm mục tiêu các thư mục đặc biệt. Có một số câu hỏi về điều đó ở đây trên SO:

How to specify common application data folder for log4net?

C# how to specify the appData file path in the app.config file

1

Yeah, đảm bảo cho người dùng biết đang thực hiện các ứng dụng có quyền ghi vào c :.

Tốt hơn, bạn có thể không muốn viết nhật ký ứng dụng của mình vào thư mục gốc c: \. Nó có lẽ sẽ là tốt hơn để lựa chọn một vị trí nơi ứng dụng của bạn được cài đặt, hoặc một nơi nào đó trong Documents and Settings (hoặc tương đương Windows 7).

+0

Đồng thời đảm bảo rằng trình cắm được chỉ định trên nhật ký. Thật dễ dàng để bỏ lỡ.Nếu bạn đang chạy các ứng dụng trong chế độ gỡ lỗi dưới VS bạn có thể sử dụng một appender dấu vết và đầu ra đăng nhập sẽ hiển thị trong cửa sổ Output, rất hữu ích nếu Log4Net chính nó nói điều gì đó. – Skurmedel

1

Vấn đề của tôi là thứ tự các bộ phận trong file App.config của tôi. Trước tiên, tôi có phần <startup> của mình, sau đó là <configSections>. Vì một lý do nào đó mà tôi không gặp lỗi trong ứng dụng Windows của mình, nhưng nó đã gây ra lỗi trong ứng dụng Console. Rõ ràng <configSections> phải là phần đầu dưới <configuration>

Vì vậy, thay vì điều này:

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

Làm điều này:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
0

gì giải quyết vấn đề của tôi là về cơ bản what CTBrewski posted here (+1 btw!), nhưng tôi đã có App.config mục nhập appSettings không phải là mục nhập configSections.

tôi chuyển mục với log4net mục config của tôi trên các mục khởi động appSettings, và sau đó các bản ghi đã được ghi vào hồ sơ người dùng:

<configuration> 
    <appSettings> 
    <add key="log4net.Config" value="log4net.config" /> 
    <add key="log4net.Config.Watch" value="True" /> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    </startup> 
    ... 
    ... 

Và sau đó tất nhiên appender của tôi trông như thế này:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="${LOCALAPPDATA}/Synclio/Logs/SynclioWin.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="5000KB" /> 
    <maxSizeRollBackups value="2" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
    </appender> 
+0

Chỉnh sửa tuyệt vời @Philipp, tôi sẽ phải nhớ sử dụng những người trợ giúp ngôn ngữ khi tôi yêu thích tô màu cú pháp. – jmort253

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