Application does not log

11,599

Solution 1

I know this post is quite old but I was getting this issue (default log4net repository) in a WCF project also. I was using the web.config with a log4net section (not a seperate log4net.config file).

To get around the issue I placed the following in my AssemblyInfo.cs:

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

The same is also true if using an external configuration file though. HTH, Ciaran

Solution 2

My web application is an ASP.NET MVC one with a separate log4net.config file in the web root.

After a lot of googling and hair-pulling I resorted to initializing log4net through code in Application_Start (in Global.asax):

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

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

This solved the problem for me and log4net started logging correctly.

Share:
11,599
Tim Reynolds
Author by

Tim Reynolds

Software engineer in Cleveland, OH. Love web development, game development and wargaming, though not necessarily in that order. Certified Magento Developer!

Updated on June 04, 2022

Comments

  • Tim Reynolds
    Tim Reynolds almost 2 years

    I have a number of ASP.NET applications that use log4net without issue. I have not been able to get log4net to log anything in any of the services I wrote using the MVC libraries. I have the configuration identical (aside from log file name) in all the services. Each service is running as the same user and use the same application pool.

    Here is the configuration I am using:

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

    I have the configSection entry in all, as follows:

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

    I have also turned on log4net debugging and set system.diagnostics to write the trace to a file. Here is where I see a difference in the output between the MVC and non-MVC applications.

    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(Working):

    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]
    

    In both cases I am creating the ILog object as follows:

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

    Is there something I am missing or some change I need to make to get this working for MVC? At this point I would also be willing to change to another logging solution if it is known to work correctly with MVC.

    Thanks Tim

  • Tim Reynolds
    Tim Reynolds over 14 years
    I will look into it. Thanks David.
  • Hector Correa
    Hector Correa over 13 years
    ELMAH is really nice but it does not replace log4net, it complements it. ELMAH is a great resource to log unhandled exceptions, for example stuff that for some reason slip pass through your lo4net calls (e.g. a developer forgot to add a try/catch or to log the exception)
  • Donal Lafferty
    Donal Lafferty over 10 years
    Note, you can put the log4net config in the Web.config. Using Server.MapPath("~/Web.config"); seems to point the XmlConfigurator to the file.
  • Clint
    Clint over 6 years
    I was using code in app_statup, using this instead solved the issue.