log4net is not working in Class library - asp.net

I want to implement logging function into a class library, which is itself referenced in a webapplication. I tried to add app.config and did everything needed, but its not logging any message, log4net simply does nothing.
Here is my app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\StagingPortal2012\Communicationlogs\TestProjlog4net.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="20MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%-5p %d %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="RollingLogFileAppender" />
<level value="DEBUG"></level>
</root>
</log4net>
<appSettings>
<add key="log4net.Internal.Debug" value="true" />
</appSettings>
</configuration>
And Assembly.Info.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "App.config")]
And Communicator.cs(Where i using log4net for writing log)
private static readonly ILog Log = LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Related

log4net AdoNetAppender in .Net core not supported?

I'm trying to implement log4net 2.0.8 in our dot net core 1.1.2 app. The ConsoleAppender is working fine, but the AdoNetAppender throws an error:
Could not load type 'log4net.Appender.AdoNetAppender'
Is AdoNetAppender still not supported in Dot Net Core?
My config:
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%thread] %-5level %logger: %message%newline" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=MyMSSQLServer; initial catalog=MyDatabase;integrated security=false;persist security info=True;User ID=sa;Password=***" />
<commandText value="dbo.prcLog4Net_LogMsg" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="#session_id" />
<dbType value="Int" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{session_id}" />
</layout>
</parameter>
<parameter>
<parameterName value="#message" />
<dbType value="AnsiString" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
The ado.net appender is not supported, you can look it up in the following page:
framework-support.html#Appenders

log4net not logging to event viewer from IIS

I have a web service set up in my IIS, the appender that logs to a text file is working fine (the text file is in the same directory as where the web service is running from). The appender that writes to the Event Viewer isn't working, I'm currently connected to the web service as administrator so I should in theory be able to do this, what else should I check/see if I'm missing?
log4net.config:
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newlineExtra Info: %property{testProperty}%newline%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO"/>
<levelMax value="FATAL"/>
</filter>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="ApplicationName" value="Lending Service" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message %newline %exception" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO"/>
<levelMax value="FATAL"/>
</filter>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="DEBUG"/>
<file value="webLog.log"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="5"/>
<maximumFileSize value="10MB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
</layout>
</appender>
<root>
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="EventLogAppender" />
</root>
<logger name="LendingService.Global_asax">
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="EventLogAppender" />
</logger>
<logger name="LendingService.LendingService">
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="EventLogAppender" />
</logger>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
The best way to find out what is going wrong is enable log4net interal debug, this will tell you where log4net is failing:
<configuration>
...
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Log4net FAQ

log4net rolling file appender not working

I have following configuration:
<log4net>
<root>
<level value="All"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="mylog.log"/>
<appendToFile value="true"/>
<preserveLogFileNameExtension value="true"/>
<rollingStyle value="Composite"/>
<datePattern value=".yyyyMMdd"/>
<maximumFileSize value="5MB"/>
<countDirection value="1"/>
<maxSizeRollBackups value="-1"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
</log4net>
And the following code in global.asax:
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
BasicConfigurator.Configure();
LogManager.GetLogger(typeof(Global_asax)).Error("Logger configured")
End Sub
For the tag file in configuration above. I have tried C:\my folder\mylog.log as well as what is seen above mylog.log
However, I do not see this file generated anywhere and there are no exceptions.
Environment: VS 2013 ASP.Net VB. Running via Debug menu. When I run IISExpress is started by VS2013 and site runs. but no log is seen.
I have tried various combinations for the file tag but nothing works.
Can someone help please?
This is final version of what I ended up doing that worked:
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\log4net.log"/>
<datePattern value="yyyy-MM-dd'-FULL.log'" />
<appendToFile value="true"/>
<preserveLogFileNameExtension value="true"/>
<rollingStyle value="Size"/>
<maximumFileSize value="250KB"/>
<maxSizeRollBackups value="-1"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
</log4net>
And
XmlConfigurator.Configure()
LogManager.GetLogger(typeof(Global_asax)).Error("Logger configured")
This logged to log\log4net.log in the application directory (i.e. where my code is )
This used to work for me (I've switched to the lighter and better configurable NLog), log rolled daily, was written in a subfolder named "Logs" under the app's path.
<appender name="RollingDebugAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\" />
<datePattern value="yyyy-MM-dd'-FULL.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
You should turn on log4net's internal debugging to figure out what's failing...
Sample web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\log4net_internal.log"/>
</listeners>
</trace>
</system.diagnostics>
</configuration>
More information available here on the troubleshooting section.
*_%date{yyyyMMdd}.log
below is the key, if this is missing u will see logs like above
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\log4net_internal.log"/>
**<staticLogFileName value="false" />**
</listeners>
</trace>
</system.diagnostics>
</configuration>
Adding debug = "true" to the <log4net> tag (i.e. <log4net debug="true"> ) can help to solve the problem

Log 4 net not logging to file

Probably a very simple setup, but I've tried to setup Log4Net. In my web.config I have:
<log4net>
<appender name="File" type="log4net.Appender.RollingFileAppender">
<file value="Logs\\Log4Net.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<logger name="File">
<level value="All" />
<appender-ref ref="LogFileAppender" />
</logger>
<root>
<level value="ALL"/>
<appender-ref ref="FileAppender"/>
</root>
</log4net>
I have added the following to my configsections:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
The following in global.asax:
log4net.Config.XmlConfigurator.Configure();
The following is on my default.aspx:
ILog alog = log4net.LogManager.GetLogger(typeof(_Default));
log4net.ILog logger = log4net.LogManager.GetLogger("File");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetupSeo();
}
alog.Error("this test");
logger.Error("Front page loaded for ip " + Request.UserHostAddress);
}
What is wrong?
I guess it is a Permission issue. The relevant directory do not have sufficent permissions so that ASP.NET can write to that.
To verify that, Enable log4net internal debugging by adding the below item to the <appSettings> section in the webconfig.
<add key="log4net.Internal.Debug" value="true"/>
Now add the below to the webconfig as well
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\myLogFolder\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
Make sure that myLogFolder folder in C drive have permissions so that ASP.NET can write to that. This will write the internal debugging message to this file. Run the app and see what happens.

Unrecognized configuration section log4net. web.config website

I use log4net to log the errors in my web application and it works fine. However if I place the same code in website I get error "Unrecognized configuration section log4net"
here is my web.config section
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" requirePermission="false"/>
<root>
<level value="RELEASE" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="D:\ESSReport\Logs\ESSlog.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="4MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%newline%-5p%d{yyyy-MM-dd hh:mm:ss} [%thread] [%logger] [%line] %newline - %message" />
</layout>
</appender>
I have added dll to my website
You are probably missing configuration section registration.
Here is sample code how you can register custom section:
<configuration>
<configSections>
<sectionGroup name="LoggerConfiguration">
<section name="GPWFLogger" type="GP.Solutions.WF.Entities.LoggerConfiguration,GPWFLogger" allowDefinition="Everywhere" allowLocation="true"/>
</sectionGroup>
</configSections>
<LoggerConfiguration>
<GPWFLogger
ConnectionStringName="ASPNETDB"
LogLevel="Full"
LogPrimaryTarget="SqlServer"
LogFilePath="GPWFwebClient.log" />
</LoggerConfiguration>
Take notice that LoggerConfiguration is registred inside sectionGroup.
You can use this principle in your case.

Resources