i am using log4j with jboss application server.the smtpappender doesnot fulfill 
my needs so i write another smtpappender.this appender has an attribute name 
String mailTo.so you can change the mailto address from the xml file.i have an 
asyncappender which contains a reference to the my smtpappender.since jboss 
also uses log4j and it has a log4j.xml file i write my loggers in that file.and 
as you know jboss has a thread that checks whether this file changed or not.
think of a position that asyncappender has 5 event in its queue. at that moment 
if i make a change in the log4j.xml file jboss thread tries to update themailTo 
field of my appender. But since there is an ongoing event in that appender this 
thread is get blocked.if again at that moment i send another event to my 
appender it also gets blocked (so my sessionbean gets blocked).what happens is 
first the 5 events in the queue is processed and then the mailTo field updated 
and finallymy session bean finishes the logging event.
what i want is my session bean never gets blocked. how can i do that.
------------------------------------------------------------------------------------------------------------------------
 <appender name="EMAIL"  class="org.uekae.log4j.appender.SMTPAppender">     
<param name="mailFrom" value="xxx"/>  <param name="subject" value="yyy"/>  
<param name="bufferSize" value="1" />   <param name="mailTo" value="[EMAIL 
PROTECTED]"/> --> </appender>
    <appender name="AsyncEmail" class="org.apache.log4j.AsyncAppender">  <param 
name="blocking" value="false" />       <appender-ref ref="EMAIL"/>    
</appender>
 <logger name="EmailLogger" additivity="false">  <level value="error"/>  
<appender-ref ref="AsyncEmail" /> 
</logger>--------------------------------------------------------------------------------------------------------/**
 * This singleton class is used for logging *  */public class MyLogger {
 private static final Logger emailLogger = Logger   .getLogger("EmailLogger");
 private static volatile MyLogger instance = null;
 private boolean debug = true;
 private boolean emailOption = true;
 protected MyLogger() { }
 public static MyLogger getInstance() {  if (instance == null) {   synchronized 
(MyLogger.class) {    if (instance == null) {     instance = new MyLogger();    
}   }  }  return instance; }
 public void warn(String message) {  emailLogger.warn(message); }
 public void error(String message) {  emailLogger.error(message); // my session 
bean gets blocked at this line }}
sorry for my englishthat is all i can do.
 
 
_________________________________________________________________
Connect to the next generation of MSN Messenger 
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline

Reply via email to