You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Ron Grabowski <ro...@yahoo.com> on 2007/08/03 04:33:37 UTC

Re: Add or change parameter value dynamicly

Is your ProcessID a special variable that isn't available during startup or do you just want to include the %processid pattern?

----- Original Message ----
From: arsenmkrt <mk...@gmail.com>
To: log4net-user@logging.apache.org
Sent: Tuesday, July 31, 2007 8:16:43 AM
Subject: Add or change parameter value dynamicly


Hello. I have a table T_Audit where i want to write my log messages in oracle
db. it has a field processid that i want to put dynamically its the
identifier of the process that is doing log not the real process just the id
of process table from my database so i decide to write my appender like this 
 
 <appender name="AdoNetAppender_Oracle"
type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.OracleClient.OracleConnection,
System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
    <connectionString value="my connection string" />
    <commandText value="INSERT INTO T_AUDIT
(LOG_ID,RM_METADATA_ID,PROCESS_ID,PROCESS_TYPE,LOG_DATE,SEVERITY,LOG_MESSAGE)
VALUES
(SEQ_AUDIT.NEXTVAL,:rmmetadataid,:processid,:processtype,:log_date,:log_level,:message)"
/>
    <bufferSize value="128" />
    <parameter>
      <parameterName value=":rmmetadataid" />
      <dbType value="Int32" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="285" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value=":processtype" />
      <dbType value="Int32" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="1" />
      </layout>
    </parameter>    
    <parameter>
      <parameterName value=":log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </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=":message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
  </appender>

i add the processID parameter programiticaly like this 

 log4net.Repository.Hierarchy.Hierarchy hierarchy = null;
            log4net.Repository.Hierarchy.Logger logger = null;
            hierarchy
=(log4net.Repository.Hierarchy.Hierarchy)LoggerManager.GetRepository(Assembly.GetCallingAssembly());

            //// Configure root logger
            logger = hierarchy.Root;
            log4net.Appender.AdoNetAppender adoAppender =
(log4net.Appender.AdoNetAppender)logger.GetAppender("AdoNetAppender_Oracle");

            log4net.Appender.AdoNetAppenderParameter processIdParam = new
log4net.Appender.AdoNetAppenderParameter();
            processIdParam.ParameterName = ":processid";
            processIdParam.DbType = System.Data.DbType.Int32;
            PatternLayout pl = new PatternLayout();
            RawLayoutConverter rlc = new RawLayoutConverter();
            pl.ConversionPattern = ProcessID.ToString();
            processIdParam.Layout = (IRawLayout)rlc.ConvertFrom(pl);
            adoAppender.AddParameter(processIdParam);
            adoAppender.ActivateOptions();
         
            hierarchy.Configured = true;
and call xmlconfigurator to configure logging before adding parameter
programiticaly. but it doesn't work. please help to solve this problem...
note that when i add procesis parameter manually to config file it all works
well.
-- 
View this message in context: http://www.nabble.com/Add-or-change-parameter-value-dynamicly-tf4192651.html#a11923011
Sent from the Log4net - Users mailing list archive at Nabble.com.





Re: Add or change parameter value dynamicly

Posted by arsenmkrt <mk...@gmail.com>.
OK i found the solution i just use mdc . I wrote parametr
<parameter>
      <parameterName value=":processid" />
      <dbType value="Int32" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%X{prid}" />
      </layout>
</parameter>
And set the value from my brogram like this
public void SetProcessID(int ProcessID)
{
      MDC.Set("prid", ProcessID.ToString());
}
I found that here

http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx

Thanks for help.


Ron Grabowski wrote:
> 
> Is your ProcessID a special variable that isn't available during startup
> or do you just want to include the %processid pattern?
> 
> ----- Original Message ----
> From: arsenmkrt <mk...@gmail.com>
> To: log4net-user@logging.apache.org
> Sent: Tuesday, July 31, 2007 8:16:43 AM
> Subject: Add or change parameter value dynamicly
> 
> 
> Hello. I have a table T_Audit where i want to write my log messages in
> oracle
> db. it has a field processid that i want to put dynamically its the
> identifier of the process that is doing log not the real process just the
> id
> of process table from my database so i decide to write my appender like
> this 
>  
>  <appender name="AdoNetAppender_Oracle"
> type="log4net.Appender.AdoNetAppender">
>     <connectionType value="System.Data.OracleClient.OracleConnection,
> System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral,
> PublicKeyToken=b77a5c561934e089" />
>     <connectionString value="my connection string" />
>     <commandText value="INSERT INTO T_AUDIT
> (LOG_ID,RM_METADATA_ID,PROCESS_ID,PROCESS_TYPE,LOG_DATE,SEVERITY,LOG_MESSAGE)
> VALUES
> (SEQ_AUDIT.NEXTVAL,:rmmetadataid,:processid,:processtype,:log_date,:log_level,:message)"
> />
>     <bufferSize value="128" />
>     <parameter>
>       <parameterName value=":rmmetadataid" />
>       <dbType value="Int32" />
>       <layout type="log4net.Layout.PatternLayout">
>         <conversionPattern value="285" />
>       </layout>
>     </parameter>
>     <parameter>
>       <parameterName value=":processtype" />
>       <dbType value="Int32" />
>       <layout type="log4net.Layout.PatternLayout">
>         <conversionPattern value="1" />
>       </layout>
>     </parameter>    
>     <parameter>
>       <parameterName value=":log_date" />
>       <dbType value="DateTime" />
>       <layout type="log4net.Layout.RawTimeStampLayout" />
>     </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=":message" />
>       <dbType value="String" />
>       <size value="4000" />
>       <layout type="log4net.Layout.PatternLayout">
>         <conversionPattern value="%message" />
>       </layout>
>     </parameter>
>   </appender>
> 
> i add the processID parameter programiticaly like this 
> 
>  log4net.Repository.Hierarchy.Hierarchy hierarchy = null;
>             log4net.Repository.Hierarchy.Logger logger = null;
>             hierarchy
> =(log4net.Repository.Hierarchy.Hierarchy)LoggerManager.GetRepository(Assembly.GetCallingAssembly());
> 
>             //// Configure root logger
>             logger = hierarchy.Root;
>             log4net.Appender.AdoNetAppender adoAppender =
> (log4net.Appender.AdoNetAppender)logger.GetAppender("AdoNetAppender_Oracle");
> 
>             log4net.Appender.AdoNetAppenderParameter processIdParam = new
> log4net.Appender.AdoNetAppenderParameter();
>             processIdParam.ParameterName = ":processid";
>             processIdParam.DbType = System.Data.DbType.Int32;
>             PatternLayout pl = new PatternLayout();
>             RawLayoutConverter rlc = new RawLayoutConverter();
>             pl.ConversionPattern = ProcessID.ToString();
>             processIdParam.Layout = (IRawLayout)rlc.ConvertFrom(pl);
>             adoAppender.AddParameter(processIdParam);
>             adoAppender.ActivateOptions();
>          
>             hierarchy.Configured = true;
> and call xmlconfigurator to configure logging before adding parameter
> programiticaly. but it doesn't work. please help to solve this problem...
> note that when i add procesis parameter manually to config file it all
> works
> well.
> -- 
> View this message in context:
> http://www.nabble.com/Add-or-change-parameter-value-dynamicly-tf4192651.html#a11923011
> Sent from the Log4net - Users mailing list archive at Nabble.com.
> 
> 
> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Add-or-change-parameter-value-dynamicly-tf4192651.html#a11977492
Sent from the Log4net - Users mailing list archive at Nabble.com.