November Happy Hour will be moved to Thursday December 5th.
November Happy Hour will be moved to Thursday December 5th.
Hi Mark
In order to troubleshoot log4net issue, you first need to enable the log4 internal debugging
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
Once this has been enabled, you should be able to see log4net internal errors if there is any from console output (via Visual Studio output window) or alternatively you can configure Diagnostic trace in web.config to write errors to a txt file
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\source\temp\log4netinternal.txt" />
</listeners>
</trace>
</system.diagnostics>
If you don't see any errors, it means your log4net are configured correctly. The next step is to check your log4net appenders. Some of log4net appenders are using buffer, it won't write logs to file immediately until messages are reached to its buffer setting. If you want logs to be flushed on a specific log level without bothering buffer, you need to configure evaluator
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR" />
</evaluator>
Last step, if you don't see any logs, you'll need to check if XmlConfigurator has been initiated anywhere in your application something like in global.ascx.cs (1st) or in startup.cs (2nd)
log4net.Config.XmlConfigurator.Configure()
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
I hope above will help you work out the issue
Thanks Vincent, that is really helpful.
I've tried your suggestions and I see the following in the trace file right at the end:
log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file. Check your .config file for the <log4net> and <configSections> elements. The configuration section should look like: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
So it looks like it's complaining it can't find the section named log4net and the associated <log4net> node in the web.config file of the Relate site but these don't exist in the Alloy site web.config file.
In the trace file it is finding the file EPiServerLog.config and it looks like it is using this to set up the logging. So it creates a new file if the existing file is not today's file etc.
So it seems like there is something in the web.config (?) that is trying to override and use the web.config rather than EPiServerLog.config? I can't spot anything obviously different between the sample Alloy site that works and the Relate site that doesn't work
More info from the trace file below so it creates and opens the expected appender, does a whole load of stuff then looks like it is trying to use the web.config file:
log4net: FileAppender: Opening file for writing [C:path to web app\App_Data\EPiServerErrors.log] append [True]
log4net: XmlHierarchyConfigurator: Created Appender [errorFileLogAppender]
log4net: XmlHierarchyConfigurator: Adding appender named [errorFileLogAppender] to logger [root].
log4net: XmlHierarchyConfigurator: Hierarchy Threshold []
log4net: DefaultRepositorySelector: Creating repository for assembly [NHibernate, Version=1.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4]
log4net: DefaultRepositorySelector: Assembly [NHibernate, Version=1.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4] Loaded From [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\5878c60a\fbac7c5e\assembly\dl3\54773b8d\2bcf72dc_0a81da01\NHibernate.dll]
log4net: DefaultRepositorySelector: Assembly [NHibernate, Version=1.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4] does not have a RepositoryAttribute specified.
log4net: DefaultRepositorySelector: Assembly [NHibernate, Version=1.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4] 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]
*** initialising conventions ***log4net: DefaultRepositorySelector: Creating repository for assembly [Web project name, Version=2.0.4.12, Culture=neutral, PublicKeyToken=null]
log4net: DefaultRepositorySelector: Assembly [Web project name, Version=2.0.4.12, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\5878c60a\fbac7c5e\assembly\dl3\0a11455b\35e5c279_ad86da01\Web project name.dll]
log4net: DefaultRepositorySelector: Assembly [Web project name, Version=2.0.4.12, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: DefaultRepositorySelector: Assembly [Web project name, Version=2.0.4.12, 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]
log4net: XmlConfigurator: configuring repository [log4net-default-repository] using .config file section
log4net: XmlConfigurator: Application config file is [C:path to web app\web.config]
log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file. Check your .config file for the <log4net> and <configSections> elements. The configuration section should look like: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
Hi Mark
As the error suggested, try to add the missing configSections first to see if it is working
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
In addtion, are both project using the same version of log4net? From memory very long time ago, I encountered a logging issue with inccorect log4net version
I hope above helps
Hi Vincent,
I have added both the <section name="log4net" and the <log4net> nodes. First I added an empty log4net node and still nothing written to the logs and then copied the config from the EPiServerLog.config into the log4net node. There are now no errors reported in the trace file. It's still weird it's using the EPiServerLog.config and then trying to get the config from the root web.config file as well.
On both occasions the trace informed that it was using the config in EPiServerLog.config and then web.config and it also infomed that it had opened the expected file for writing (for each config). Again nothing is written to the log file. Note I am throwing an exception in a controller to force an error which I would expect to be in the log file.
I checked the versions of log4net being used in the site that works and the site that doesn't and they were different. Updating the site that doesn't work to use the same version hasn't made any difference unfortunately.
I have a CMS 10.10.4 site that uses Relate (Community) where the logging is configured and the file is created but nothing is written to the file regardless of the logging level and even if I deliberately throw an error.
I have spun up a sample alloy tech site in version 10.0.1 and with no configuration the logging is working in this sample site as expected - it creates the file and logs to the file.
I've compared the config of the two sites to make sure they are the same and as far as I can tell they are.
The content of EPiServerLog.config is the same in both sites.
The Relate site that's not working does have a separate custom logging solution but I have commented this out in case it was causing conflicts and still not working.
The only difference in the Relate site config is that I have these entries in appSettings, if I comment these out then the files are not generated. Note these are not present in the alloy site which is working
<!-- add these entries to configure log4net -->
<add key="log4net.Config" value="EPiServerLog.config"/>
<add key="log4net.Config.Watch" value="True"/>
Both sites are using version 2.1.0 of EPiServer.Logging.Log4Net
Alloy is using version 1.2.13 of log4net and the Relate site is using 1.2.10
I guess it could be the use of Relate?
Note: I can't upgrade the Relate site as it's using Relate and on premise Find
Any thoughts or suggestions greatly appreciated...