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