Приложение не регистрируется - PullRequest
6 голосов
/ 15 декабря 2009

У меня есть несколько приложений ASP.NET, которые используют log4net без проблем. Мне не удалось заставить log4net регистрировать что-либо в любой из сервисов, которые я написал с использованием библиотек MVC. У меня одинаковая конфигурация (кроме имени файла журнала) во всех сервисах. Каждый сервис работает под одним и тем же пользователем и использует один и тот же пул приложений.

Вот конфигурация, которую я использую:

<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>

У меня есть запись configSection, как указано ниже:

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

Я также включил отладку log4net и установил system.diagnostics для записи трассировки в файл. Здесь я вижу разницу в результатах между приложениями MVC и не-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 (рабочий):

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]

В обоих случаях я создаю объект ILog следующим образом:

приватная статическая только для чтения ILog log = LogManager.GetLogger (typeof (CLASSNAME));

Есть что-то, чего мне не хватает или какие-то изменения, которые мне нужно сделать, чтобы заставить это работать для MVC? На этом этапе я также хотел бы перейти на другое решение для ведения журнала, если известно, что оно правильно работает с MVC.

Спасибо Тим

Ответы [ 6 ]

10 голосов
/ 05 октября 2010

Я знаю, что этот пост довольно старый, но я получал эту проблему (репозиторий log4net по умолчанию) также в проекте WCF. Я использовал web.config с разделом log4net (не отдельным файлом log4net.config).

Чтобы обойти проблему, я поместил в свой AssemblyInfo.cs следующее:

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

То же самое верно и для внешнего файла конфигурации. НТН, Киран

4 голосов
/ 30 января 2013

Мое веб-приложение - это ASP.NET MVC с отдельным файлом log4net.config в корневом веб-каталоге.

После долгих поисков и поисков я прибег к инициализации log4net через код в Application_Start (в Global.asax):

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

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

Это решило проблему для меня, и log4net начал правильно регистрироваться.

0 голосов
/ 27 декабря 2012

Кроме того, установка «copy local» для файла конфигурации log4net также позволит избежать многих проблем.

0 голосов
/ 07 сентября 2011

В моем случае это было потому, что в свойствах проекта было задано значение bin \ debug, но dll log4net требовал наличия файла log4net.config в папке BIN. Я изменил свойства проекта для вывода в папку bin, и файл log4net.config был скопирован во время сборки в нужное место.

0 голосов
/ 15 декабря 2009
0 голосов
/ 15 декабря 2009

Используйте NLog. Просто похоже на работу. Мне пришлось поместить файл NLog.config в базовый каталог (рядом с web.config), и он работал нормально. Был в состоянии написать в правильный каталог, который мне доказывает, что права доступа к каталогу были настроены правильно. Потребовалось около 5 минут, чтобы начать вносить изменения.

Было бы неплохо узнать, почему log4net отказался играть.

...