Wednesday, January 2, 2008

Log4Net Debugging Trace Troubleshooting

I couldn't have made it work without the trace. Make sure the following sections are in your Web.config. Then look for the log files in the application root. The directory should have 'write' permissions for ASP.NET user.

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="log4net_trace.txt" />
</listeners>
</trace>
</system.diagnostics>

<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>

<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
</appender>

<root>
<level value="ALL"/>
<appender-ref ref="FileAppender"/>
</root>

</log4net>

</configuration>

C# Log4Net Oracle Appender

<log4net>
<appender name="Oracle" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089"/>
<connectionString value="Data Source=TNSName;User ID=MyTableSpace;Password=password;"/>
<commandText value="INSERT INTO LOG_TABLE (DATETIME, THREAD, LOG_LEVEL, LOGGER ,MESSAGE, EXCEPTION, APPDOMAIN, NDC) VALUES (:log_date, :thread, :log_level, :logger, :message, :exception, :appdomain, :ndc)"/>
<bufferSize value="1"/>
<parameter>
<parameterName value=":log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value=":thread"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value=":log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value=":logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value=":message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
<parameter>
<parameterName value=":exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%exception"/>
</layout>
</parameter>
<parameter>
<parameterName value=":appdomain"/>
<dbType value="String"/>
<size value="200"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%appdomain"/>
</layout>
</parameter>
<parameter>
<parameterName value=":ndc"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%ndc"/>
</layout>
</parameter>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="Oracle"/>
</root>
</log4net>



Log Table Script

CREATE TABLE LOG_TABLE
(
DATETIME TIMESTAMP(3),
THREAD VARCHAR2(255 BYTE),
LOG_LEVEL VARCHAR2(255 BYTE),
LOGGER VARCHAR2(255 BYTE),
MESSAGE VARCHAR2(4000 BYTE),
EXCEPTION VARCHAR2(2000 BYTE),
APPDOMAIN VARCHAR2(200 BYTE),
NDC VARCHAR2(2000 BYTE),
ID NUMBER(10) NOT NULL
)
TABLESPACE MyTableSpace
PCTUSED 40
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;


CREATE UNIQUE INDEX LOG_TABLE_PK ON LOG_TABLE
(ID)
LOGGING
TABLESPACE MyTableSpace
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;


ALTER TABLE LOG_TABLE ADD (
CONSTRAINT LOG_TABLE_PK
PRIMARY KEY
(ID)
USING INDEX
TABLESPACE PWC
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
));

Check This Out!

More Links to Good Information