logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nicko Cadell" <ni...@neoworks.com>
Subject RE: Type int in ADOAppender.
Date Mon, 18 Jul 2005 20:37:13 GMT
 

> -----Original Message-----
> From: Nicko Cadell [mailto:nicko@neoworks.com] 
> Sent: 18 July 2005 21:36
> To: Log4NET User
> Subject: RE: Type int in ADOAppender.
> 
> The log4net.Layout.PatternLayout generates a string as 
> output. The IDbDataParameter cannot have its DbType property 
> set to Int32 and its Value property set to a String.
> 
> You can use the RawPropertyLayout to extract a property value 
> in its original object form, rather than as a string.
> 
> <param name="Parameter"> 
>    <param name="ParameterName" value="@userID" /> 
>    <param name="DbType" value="String" /> 

Of course this should have been:
<param name="DbType" value="Int32" /> 


>    <param name="Size" value="40" /> 
>    <param name="Layout" type="log4net.Layout.RawPropertyLayout"> 
>       <param name="Key" value="UserID" /> 
>    </param>
> </param>
> 
> You will have to store the UserID (as an int) in the properties map,
> e.g.:
> 
> log4net.ThreadContext.Properties["UserID"] = userId;
> 
> 
> If you want to write your own custom database appender you 
> can use this as a good starting point:
> 
> 
> public sealed class FastDbAppender : IAppender, IOptionHandler {
> 	private string m_name;
> 	private string m_connectionString;
> 	private SqlConnection m_dbConnection;
> 
> 	public string Name
> 	{
> 		get { return m_name; }
> 		set { m_name = value; }
> 	}
> 
> 	public string ConnectionString
> 	{
> 		get { return m_connectionString; }
> 		set { m_connectionString = value; }
> 	}
> 
> 	public void ActivateOptions() 
> 	{
> 		m_dbConnection = new SqlConnection(m_connectionString);
> 		m_dbConnection.Open();
> 	}
> 
> 	public void Close()
> 	{
> 		if (m_dbConnection != null)
> 		{
> 			m_dbConnection.Close();
> 		}
> 	}
> 
> 	public void DoAppend(LoggingEvent loggingEvent)
> 	{
> 		SqlCommand command = m_dbConnection.CreateCommand();
> 		command.CommandText = "INSERT INTO [LogTable]
> ([Time],[Logger],[Level],[Thread],[Message]) VALUES 
> (@Time,@Logger,@Level,@Thread,@Message)";
> 
> 		command.Parameters.Add("@Time", loggingEvent.TimeStamp);
> 		command.Parameters.Add("@Logger",
> loggingEvent.LoggerName);
> 		command.Parameters.Add("@Level",
> loggingEvent.Level.Name);
> 		command.Parameters.Add("@Thread",
> loggingEvent.ThreadName);
> 		command.Parameters.Add("@Message",
> loggingEvent.RenderedMessage);
> 
> 		command.ExecuteNonQuery();
> 	}
> }
> 
> 
> Cheers,
> 
> Nicko
> 
> 
> > -----Original Message-----
> > From: pato43 [mailto:pato43@ig.com.br]
> > Sent: 11 July 2005 23:20
> > To: log4net-user@logging.apache.org
> > Subject: Type int in ADOAppender.
> > 
> > Dear Friends,
> > 
> >   I really tried several times to make my ADOApeender to accept a 
> > parameter as int, but did not work any time.
> > 
> > The field in my database is an Int. My database is a sqlserver. 
> > If i change the database type to string, works, when i back to Int, 
> > doens't work, and any error appears.
> > 
> > This kind of configuration works ok.... 
> > <param name="Parameter"> 
> >    <param name="ParameterName" value="@userID" /> 
> >    <param name="DbType" value="String" /> 
> >    <param name="Size" value="40" /> 
> >    <param name="Layout" type="log4net.Layout.PatternLayout"> 
> >       <param name="ConversionPattern" value="%x" /> 
> >    </param>
> > </param>
> > 
> > But what i should to do to work with an Int ? 
> > I try to change the DbType to Int, Int32. 
> > I try to remove the size parameter and mantain the Dbtype 
> as string. 
> > I try to remove the layout parameter... and much more... :))
> > 
> > Please, help me. I'm going to write my own database logger. 
> > 
> > Regards,
> > 
> > Pietro. 
> >
> 

Mime
View raw message