5

Tôi có một số ứng dụng ASP.NET sử dụng log4net không có vấn đề. Tôi đã không thể có được log4net để đăng nhập bất cứ điều gì trong bất kỳ dịch vụ tôi đã viết bằng cách sử dụng thư viện MVC. Tôi có cấu hình giống hệt nhau (ngoài tên tệp nhật ký) trong tất cả các dịch vụ. Mỗi dịch vụ đang chạy với cùng một người dùng và sử dụng cùng một nhóm ứng dụng.Ứng dụng không đăng nhập

Dưới đây là cấu hình tôi đang sử dụng:

<log4net> 
     <appender name="XMLAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="C:\logs\SERVICENAME.Log.xml"/> 
      <appendToFile value="true"/> 
      <rollingStyle value="Composite"/> 
      <datePattern value="yyyyMM"/> 
      <maxSizeRollBackups value="10"/> 
      <maximumFileSize value="100MB"/> 
      <layout type="log4net.Layout.XmlLayoutSchemaLog4j"> 
       <locationInfo value="false"/> 
      </layout> 
    </appender> 
     <root> 
      <level value="INFO"/> 
      <appender-ref ref="XMLAppender"/> 
     </root> 
    </log4net> 

Tôi có mục configSection trong tất cả, như sau:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
... 
</configSections> 

Tôi cũng đã bật log4net gỡ lỗi và thiết lập System.Diagnostics để viết dấu vết vào một tập tin. Đây là nơi tôi thấy một sự khác biệt trong đầu ra giữa các ứng dụng MVC và non-MVC.

MVC:

log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MVCSERVICENAME\25c1b478\883641ac\assembly\dl3\707a9005\e1887c7f_5040ca01\log4net.DLL]. (.NET Runtime [2.0.50727.3074] on Microsoft Windows NT 6.0.6002 Service Pack 2, v.286) 
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository for assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MVCSERVICENAME\25c1b478\883641ac\assembly\dl3\13a19b30\fdb642f4_937dca01\MVCSERVICENAME.DLL] 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: DefaultRepositorySelector: Assembly [MVCSERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository] 

Non-MVC (làm việc):

log4net log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\fe97001a\e1887c7f_5040ca01\log4net.DLL]. (.NET Runtime [2.0.50727.3074] on Microsoft Windows NT 6.0.6002 Service Pack 2, v.286) 
log4net DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: Creating repository for assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\827ed068\1a38e2eb_fc7cca01\SERVICENAME.DLL] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net DefaultRepositorySelector: Assembly [SERVICENAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
log4net XmlConfigurator: configuring repository [log4net-default-repository] using .config file section 
log4net XmlConfigurator: Application config file is [C:\content\SERVICENAME\web.config] 
log4net XmlConfigurator: Configuring Repository [log4net-default-repository] 
log4net XmlHierarchyConfigurator: Configuration update mode [Merge]. 
log4net XmlHierarchyConfigurator: Logger [root] Level string is [INFO]. 
log4net XmlHierarchyConfigurator: Logger [root] level set to [name="INFO",value=40000]. 
log4net XmlHierarchyConfigurator: Loading Appender [XMLAppender] type: [log4net.Appender.RollingFileAppender] 
log4net XmlHierarchyConfigurator: Setting Property [File] to String value [C:\Windows\Temp\SERVICENAME.Log.xml] 
log4net XmlHierarchyConfigurator: Setting Property [AppendToFile] to Boolean value [True] 
log4net XmlHierarchyConfigurator: Setting Property [RollingStyle] to RollingMode value [Composite] 
log4net XmlHierarchyConfigurator: Setting Property [DatePattern] to String value [yyyyMM] 
log4net XmlHierarchyConfigurator: Setting Property [MaxSizeRollBackups] to Int32 value [10] 
log4net XmlHierarchyConfigurator: Setting Property [MaximumFileSize] to String value [100MB] 
log4net XmlHierarchyConfigurator: Setting Property [LocationInfo] to Boolean value [False] 
log4net XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.XmlLayoutSchemaLog4j] 
log4net RollingFileAppender: Type = [0], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [1], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [2], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [3], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [4], r0 = [197001], r1 = [197001] 
log4net RollingFileAppender: Type = [5], r0 = [197001], r1 = [197002] 
log4net RollingFileAppender: Searched for existing files in [C:\Windows\Temp] 
log4net RollingFileAppender: curSizeRollBackups starts at [0] 
log4net RollingFileAppender: [200912] vs. [200912] 
log4net FileAppender: Opening file for writing [C:\Windows\Temp\SERVICENAME.Log.xml] append [True] 
log4net XmlHierarchyConfigurator: Created Appender [XMLAppender] 
log4net XmlHierarchyConfigurator: Adding appender named [XMLAppender] to logger [root]. 
log4net XmlHierarchyConfigurator: Hierarchy Threshold [] 
log4net DefaultRepositorySelector: Creating repository for assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\SERVICENAME\33034378\c825df91\assembly\dl3\d74dc9d5\8aa6a7e8_fc7cca01\SERVICENAME.Core.DLL] 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net DefaultRepositorySelector: Assembly [SERVICENAME.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net DefaultRepositorySelector: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy] 

Trong cả hai trường hợp tôi đang tạo ra các đối tượng ILOG như sau:

tin readonly tĩnh ILOG log = LogManager .GetLogger (typeof (CLASSNAME));

Có điều gì tôi thiếu hoặc một số thay đổi mà tôi cần thực hiện để làm việc này cho MVC không? Tại thời điểm này tôi cũng sẽ sẵn sàng thay đổi giải pháp đăng nhập khác nếu nó được biết là hoạt động chính xác với MVC.

Cảm ơn Tim

+0

quy trình công nhân của bạn có quyền ghi vào c: \ logs không? –

+0

Có. Đối với những gì giá trị của nó tôi chỉ cố gắng NLog và nó đã làm việc hoàn hảo. Nên đã từ bỏ trên log4net một thời gian trước đây. –

Trả lời

0

Sử dụng NLog. Có vẻ như chỉ hoạt động. Tôi đã phải đặt các tập tin NLog.config trong thư mục cơ sở (dọc theo bên web.config) và nó làm việc tốt. Đã có thể ghi vào thư mục chính xác, mà để tôi chứng minh các điều khoản thư mục đã được thiết lập chính xác. Mất khoảng 5 phút bắt đầu kết thúc để thực hiện thay đổi.

Thật tuyệt khi biết tại sao log4net từ chối chơi.

+1

Hoặc có một cái nhìn tại ELMAH http://code.google.com/p/elmah/ – David

+0

Tôi sẽ xem xét nó. Cảm ơn David. –

+2

ELMAH thực sự tốt đẹp nhưng nó không thay thế log4net, nó bổ sung cho nó. ELMAH là một nguồn tài nguyên tuyệt vời để ghi lại các ngoại lệ chưa được xử lý, ví dụ như một số lý do trượt qua các cuộc gọi lo4net của bạn (ví dụ: một nhà phát triển quên thêm một lần thử/nắm bắt hoặc để ghi lại ngoại lệ) –

10

Tôi biết bài này là khá cũ nhưng tôi đã nhận được vấn đề (kho log4net mặc định) này trong một dự án WCF cũng có. Tôi đã sử dụng web.config với phần log4net (không phải tệp log4net.config riêng biệt).

Để khắc phục vấn đề tôi đặt sau trong AssemblyInfo.cs của tôi:

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

Cùng cũng đúng nếu sử dụng một tập tin cấu hình bên ngoài mặc dù. HTH, Ciaran

+0

Thankyou - Tôi đã có chính xác cùng một vấn đề và điều này giải quyết nó. – Justin

+0

Tôi đã sử dụng mã trong app_statup, việc này thay vì giải quyết vấn đề. – Clint

0

Trong trường hợp của tôi, đó là do thuộc tính dự án được đặt thành đầu ra để bin \ debug nhưng tệp log4net yêu cầu tệp log4net.config tồn tại trong thư mục BIN. Tôi đã thay đổi các thuộc tính của dự án để xuất ra thư mục bin và tệp log4net.config sau đó được sao chép vào thời gian xây dựng vào đúng vị trí.

0

Ngoài ra, đảm bảo "sao chép cục bộ" được đặt cho tệp cấu hình log4net cũng sẽ ngăn nhiều sự cố.

+0

Điều này có lẽ nên là một bình luận, không phải là một câu trả lời chính thức ... – IronMan84

4

Ứng dụng web của tôi là một ứng dụng ASP.NET MVC với một tệp log4net.config riêng biệt trong gốc web.

Sau rất nhiều googling và tóc kéo tôi viện đến khởi log4net qua mã trong Application_Start (trong Global.asax):

protected void Application_Start() 
{ 
    var logConfigFilePath = Server.MapPath("~/log4net.config"); 

    log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(logConfigFilePath)); 
} 

này đã giải quyết được vấn đề đối với tôi và log4net bắt đầu đăng nhập một cách chính xác.

+0

Lưu ý, bạn có thể đặt cấu hình log4net trong 'Web.config'. Sử dụng 'Server.MapPath (" ~/Web.config ");' dường như trỏ XmlConfigurator vào tệp. –

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