Log4net example needed in MVC5

Discussion of open issues, suggestions and bugs regarding LinqConnect – Devart's LINQ to SQL compatible ORM
Post Reply
denheijer
Posts: 3
Joined: Mon 07 Jul 2014 11:58

Log4net example needed in MVC5

Post by denheijer » Wed 13 Aug 2014 14:12

Hello DevArt,
I'm looking for an example on how to implement Log4Net in MVC5 with LinqConnect Pro 4.4.553.
I can only find one example of Oracle (which we do not work with), but I can not get it to work for sqlite by DevArt.

I created a seperate Log4Net.config file in the root of my project which includes:
(Do I need to set public keys or version numbers on de DevArt connectionstring? And what are they for version 4.4.553?)

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net debug="true">
    <root>
      <level value="DEBUG" />
      <appender-ref ref="sqlite-appender" />
      <!-- Uncomment when basic TextAppender is needed
      <appender-ref ref="file-appender" />
      -->
    </root>
    
    <appender name="file-appender" type="log4net.Appender.FileAppender+MinimalLock">
      <file value="log-file.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <appender name="sqlite-appender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <!--<connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite" />-->
      <connectionType value="DevArt.Data.SQLite.SQLiteConnection, DevArt.Data.SQLite" />
      <connectionString value="Data Source=E:\Development\EDevelopment\MVC\Db\Edb.s3db" />
      <!--<connectionString value="Data Source=|DataDirectory|\DebugLog.db;Synchronous=Off " />-->
      <commandText value="INSERT INTO nseLog
                                     (
                                      appdomain, aspnetcache, aspnetcontext, 
                                      aspnetrequest, aspnetsession, [date], 
                                      exception, file, identity, location, level, 
                                      line, logger, message, method, ndc, 
                                      property, stacktrace, stacktracedetail, 
                                      [timestamp], thread, type, username, 
                                      utcdate
                                     ) 
                              VALUES (
                                      @appdomain, @aspnetcache, @aspnetcontext, 
                                      @aspnetrequest, @aspnetsession, @date, 
                                      @exception, @file, @identity, @location, 
                                      @level, @line, @logger, @message, @method, 
                                      @ndc, @property, @stacktrace, @stacktracedetail, 
                                      @timestamp, @thread, @type, @username, 
                                      @utcdate
                                     )" />
      <parameter>
        <parameterName value="@appdomain" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%appdomain" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@aspnetcache" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%aspnet-cache" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@aspnetcontext" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%aspnet-context" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@aspnetrequest" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%aspnet-request" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@aspnetsession" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%aspnet-session{Usuario}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%exception" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@file" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%file" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@identity" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%identity" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@location" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%location" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@level" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@line" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%line" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@method" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%method" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@ndc" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%ndc" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@property" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@stacktrace" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%stacktrace" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@stacktracedetail" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%stacktracedetail" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@timestamp" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%timestamp" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@type" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%type" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@username" />
        <dbType value="String" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%username" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@utcdate" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%utcdate{yyyy-MM-dd HH:mm:ss}" />
        </layout>
      </parameter>
    </appender>


  </log4net>
</configuration>
The table in sqlite db:

Code: Select all

CREATE TABLE "main".nseLog (
  ID INTEGER PRIMARY KEY AUTOINCREMENT,
  [appdomain] TEXT, 
  [aspnetcache] TEXT, 
  [aspnetcontext] TEXT, 
  [aspnetrequest] TEXT, 
  [aspnetsession] TEXT, 
  [date] DATE NOT NULL DEFAULT 'now', 
  [exception] TEXT, 
  [file] TEXT, 
  [identity] TEXT, 
  [location] TEXT, 
  [level] TEXT, 
  [line] integer, 
  [logger] TEXT, 
  [message] TEXT, 
  [method] TEXT, 
  [ndc] TEXT, 
  [property] TEXT, 
  [stacktrace] TEXT, 
  [stacktracedetail] TEXT, 
  [timestamp] bigint, 
  [thread] TEXT, 
  [type] TEXT, 
  [username] TEXT, 
  [utcdate] DATE NOT NULL DEFAULT 'now', 
  [appfree1] TEXT, 
  [appfree2] TEXT, 
  [appfree3] TEXT
)
In my Global.asax.cs - Application_Start() I added:

Code: Select all

        protected void Application_Start()
        {
            ....

            var log4NetPath = Server.MapPath("~/Log4Net.config");
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(log4NetPath));
        }
and at last in the controller I want to log, which does not log to db (no error is given)

Code: Select all

public class EController : BaseController
{
   private static readonly ILog logger = LogManager.GetLogger(typeof(EController).FullName);

   public DbLog()
   {
      logger.Info("It's working");
      logger.Debug("Debug messages are not recorded due to log level");
      logger.Warn("It's a warning now");
      logger.Error("It's an error now 2");
      logger.Fatal("This is the end!");
   }
No errors are given on debug or release, but there is also no registration in de sqlite db.
Please help, is there some implementation example (also to file) how to do this?

MariiaI
Devart Team
Posts: 1472
Joined: Mon 13 Feb 2012 08:17

Re: Log4net example needed in MVC5

Post by MariiaI » Thu 14 Aug 2014 12:20

Please try changing this code

Code: Select all

<connectionType value="DevArt.Data.SQLite.SQLiteConnection, DevArt.Data.SQLite" />
to this

Code: Select all

<connectionType value="Devart.Data.SQLite.SQLiteConnection, Devart.Data.SQLite" />
A similar solution is described here.

We recommend you using the dbMonitor tool that performs per-component tracing of database events such as commit, rollback, SQL statement execute etc.
Download link: http://www.devart.com/dbmonitor/dbmon3.exe
Documentation:
http://www.devart.com/dotconnect/sqlite ... nitor.html
http://www.devart.com/linqconnect/docs/?Monitoring.html

Also, Log4Net is a third-party tool and we cannot guarantee its stable work.

denheijer
Posts: 3
Joined: Mon 07 Jul 2014 11:58

Re: Log4net example needed in MVC5

Post by denheijer » Fri 15 Aug 2014 12:45

Thanks. That's it, a capitalized 'A' in DevArt ( :( ).

Also, I found out that your reference of 'Devart.Data.SQLite' should be set to 'Copy Local' else it still does not work.

(I updated to the last LinqConnect one day earlier, and did not look to the output of the dll property, while I referenced it to the new one. On building the project, the Log4Net.config responded with a message that it could not find the devart dll.)

Devart.Data.SQLite Reference Properties : Copy Local : True

I'm glad that there is a working example now in the forum.

MariiaI
Devart Team
Posts: 1472
Joined: Mon 13 Feb 2012 08:17

Re: Log4net example needed in MVC5

Post by MariiaI » Fri 15 Aug 2014 13:04

If you have any further questions, feel free to contact us.

Post Reply