Helpex - Trao đổi & giúp đỡ Đăng nhập
7

Tôi có một số ứng dụng ASP.NET sử dụng log4net mà không gặp sự cố. Tôi không thể lấy log4net để đăng nhập bất kỳ thứ gì vào bất kỳ dịch vụ nào tôi đã viết bằ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.

Đâ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 gỡ lỗi log4net và đặt system.diagnostics để ghi dấu vết vào một tệp. Đây là nơi tôi thấy sự khác biệt trong đầu ra giữa các ứng dụng MVC và không phải 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]

Không phải MVC (Đang hoạt động):

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 đối tượng ILog như sau:

private static readonly ILog log = LogManager.GetLogger (typeof (CLASSNAME));

Có điều gì tôi đang thiếu hoặc một số thay đổi tôi cần thực hiện để làm cho điều này hoạt động 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 ghi nhật ký khác nếu nó được biết là hoạt động chính xác với MVC.

Cảm ơn Tim

7 hữu ích 2 bình luận 11k xem chia sẻ
12

Tôi biết bài đăng này khá cũ nhưng tôi cũng gặp sự cố này (kho lưu trữ log4net mặc định) trong một dự án WCF. Tôi đang sử dụng web.config với phần log4net (không phải tệp log4net.config riêng biệt).

Để giải quyết vấn đề, tôi đã đặt phần sau trong AssemblyInfo.cs của mình:

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

Điều này cũng đúng nếu sử dụng tệp cấu hình bên ngoài. HTH, Ciaran

12 hữu ích 1 bình luận chia sẻ
4

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

Sau rất nhiều googling và giật tóc, tôi đã sử dụng đến việc khởi tạo log4net thông 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));
}

Điều này đã giải quyết vấn đề cho tôi và log4net bắt đầu ghi lại chính xác.

4 hữu ích 1 bình luận chia sẻ
0

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

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

0 hữu ích 2 bình luận chia sẻ
0
0 hữu ích 0 bình luận chia sẻ
0

Trong trường hợp của tôi, đó là do các thuộc tính dự án được đặt để xuất thành bin \ debug nhưng dll 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 tại thời điểm xây dựng vào đúng vị trí.

0 hữu ích 0 bình luận chia sẻ
0

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

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ asp.net mvc model-view-controller logging web-config log4net , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading