sinsedrix
sinsedrix

Reputation: 4775

How to configure log4net for mySQL?

I am trying to log events in a mySQL database using a log4net appender but I do not manage to configure log4net file correctly,

Here is the log4net.config:

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1"/>
  <lossy value="false"/>
  <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
  <!--connectionString value="Server=my_server_ip_or_name;Database=my_db_name; Uid=my_user_name;Pwd=my_passwd;"/-->
  <connectionString value="server=my_server_ip_or_name;database=my_db_name; user=my_user_name;password=my_passwd;port=3306"/>
  <commandText value="INSERT INTO Log (dtLog,lbThread,lbLevel,lbLogger,lbMessage,lbException,lbContext) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @context)"/>
  <parameter>
    <parameterName value="@log_date"/>
    <dbType value="DateTime"/>
    <layout type="log4net.Layout.RawTimeStampLayout"/>
  </parameter>
  <parameter>
    <parameterName value="@thread"/>
    <dbType value="String"/>
    <size value="32"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%t"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level"/>
    <dbType value="String"/>
    <size value="10"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%p"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@context"/>
    <dbType value="String"/>
    <size value="10"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%x"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@logger"/>
    <dbType value="String"/>
    <size value="512"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%c"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@message"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%m"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@exception"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.ExceptionLayout"/>
  </parameter>

</appender>

At runtime, I get the following exception:

{"Object reference not set to an instance of an object. (C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Config\\machine.config line 295)"}

Which corresponds to the following config line:

<add name="MySqlSiteMapProvider" type="MySql.Web.SiteMap.MySqlSiteMapProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />

The debug of log4net logs the following error:

iisexpress.exe Error: 0 : Authentication to host 'my_server_ip_or_name' for user 'my_user_name' using method 'mysql_native_password' failed with message: Access denied for user 'my_user_name'@'my_local_machine_name' (using password: YES)

log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Could not open database connection [server=my_server_ip_or_name;database=my_db_name; user=my_user_name;password=my_passwd;port=3306]. Connection string context [ConnectionString]. MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host 'my_server_ip_or_name' for user 'my_usr_name' using method 'mysql_native_password' failed with message: Access denied for user 'my_user_name'@'my_local_machine_name' (using password: YES) ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Access denied for user 'my_user_name'@'my_local_machine_name' (using password: YES)

I do not understand why log4net tries to connect to my local computer instead of the server I configured.

Any idea of what is wrong in my config?

Upvotes: 1

Views: 2097

Answers (1)

sinsedrix
sinsedrix

Reputation: 4775

As @TZHX noticed, I had to grant remote access for the mySQL user at the remote IP:

GRANT ALL ON my_db_name.* TO my_user_name@'my_remote_ip' IDENTIFIED BY 'my_passwd';

I also had to comment the MySql sitemap config in the machine.config file:

<!--add name="MySqlSiteMapProvider" type="MySql.Web.SiteMap.MySqlSiteMapProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" /-->

Upvotes: 0

Related Questions