Bug 49592

Summary: 477 All Attributes Not Set
Product: Log4j Reporter: Vilas <x_tadoor>
Component: AppenderAssignee: log4j-dev <log4j-dev>
Status: NEW ---    
Severity: critical CC: x_tadoor
Priority: P2 Keywords: ErrorMessage
Version: 1.2   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   

Description Vilas 2010-07-14 07:31:22 UTC
We are using the HierarchyDynamicMBean Mbean to get  all the log4j mbeans registered.
We have a in built Monitoring, Logging and Debugging tool Mbean and we using HierarchyDynamicMBean to register it to the PlatformMBeanServer and the HTML Adaptor so that the MLD MBean appears in the log4j hiearchy.
When we are setting the "priority" of this logger it sets the priority but prints the following message

 477 All Attributes Not Set
--------------------------------------------------------------------------------
2/3 attribute(s) were not set:

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Step one:
  From the eclipse launch the application code from the Source code for an executable test case section below.

Step two:
from the internet explorer launch http://localhost:9393

Step Three:
In the log4J section of the page
Select "logger=root" MBean , in its attribute page change the priority from DEBUG to WARN and click on apply button below and we get the following message as

 477 All Attributes Not Set

ACTUAL -
 477 All Attributes Not Set

ERROR MESSAGES/STACK TRACES THAT OCCUR :
javax.management.AttributeNotFoundException: Attribute appender%3Dorg.apache.log4j.FileAppender@1c9a690 not found in org.apache.log4j.jmx.LoggerDynamicMBean
	at org.apache.log4j.jmx.LoggerDynamicMBean.setAttribute(LoggerDynamicMBean.java:242)
	at org.apache.log4j.jmx.AbstractDynamicMBean.setAttributes(AbstractDynamicMBean.java:118)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttributes(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.setAttributes(JmxMBeanServer.java:728)
	at com.sun.jdmk.comm.HtmlObjectPage.setObjectValue(HtmlObjectPage.java:426)
	at com.sun.jdmk.comm.HtmlRequestHandler.processGetRequest(HtmlRequestHandler.java:301)
	at com.sun.jdmk.comm.HtmlRequestHandler.processRequest(HtmlRequestHandler.java:155)
	at com.sun.jdmk.comm.HtmlRequestHandler.doRun(HtmlRequestHandler.java:82)
	at com.sun.jdmk.comm.ClientHandler.run(ClientHandler.java:99)
	at java.lang.Thread.run(Thread.java:619)
javax.management.AttributeNotFoundException: Attribute appender%3Dorg.apache.log4j.FileAppender@1c9a690 not found in org.apache.log4j.jmx.LoggerDynamicMBean
	at org.apache.log4j.jmx.LoggerDynamicMBean.setAttribute(LoggerDynamicMBean.java:242)
	at org.apache.log4j.jmx.AbstractDynamicMBean.setAttributes(AbstractDynamicMBean.java:118)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttributes(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.setAttributes(JmxMBeanServer.java:728)
	at com.sun.jdmk.comm.HtmlObjectPage.setObjectValue(HtmlObjectPage.java:426)
	at com.sun.jdmk.comm.HtmlRequestHandler.processGetRequest(HtmlRequestHandler.java:301)
	at com.sun.jdmk.comm.HtmlRequestHandler.processRequest(HtmlRequestHandler.java:155)
	at com.sun.jdmk.comm.HtmlRequestHandler.doRun(HtmlRequestHandler.java:82)
	at com.sun.jdmk.comm.ClientHandler.run(ClientHandler.java:99)
	at java.lang.Thread.run(Thread.java:619)


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
This is the example source code that we have done outside our dev environment

the following is the source code

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.Vector;

import javax.management.InstanceAlreadyExistsException;
import javax.management.JMException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;


import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.jmx.*;
import com.sun.jdmk.comm.HtmlAdaptorServer;

//import org.apache.log4j.BasicConfigurator;

public class MyTestApp  {
	private Vector dAttributes = new Vector();
	private static Logger logger = Logger.getRootLogger();
	static MBeanServer server = ManagementFactory.getPlatformMBeanServer();
	private static Logger cat = Logger.getLogger(MyTestApp.class);
//	public MyTestApp(Logger logger)
//	{
//		super(logger);
//
//	}					
	 public void go() throws Exception{
	        while(true){
	            logger.debug("DEBUG") ;
	            logger.info("INFO") ;
	            logger.warn("WARN");
	            logger.error("ERROR");
	            logger.fatal("FATAL");
	            Thread.sleep(2000);
	        }
	    }
	 
	 
//	 void registerAppenderMBean1(Appender appender) {
//		    String name = getAppenderName(appender);
//		    cat.debug("Adding AppenderMBean for appender named "+name);
//		    ObjectName objectName = null;
//		    try {
//		      AppenderDynamicMBean appenderMBean = new AppenderDynamicMBean(appender);
//		      objectName = new ObjectName("log4j", "appender", name);
//		      if (!server.isRegistered(objectName)) {
//		        server.registerMBean(appenderMBean, objectName);
//		        dAttributes.add(new MBeanAttributeInfo("appender=" + name, "javax.management.ObjectName",
//		                "The " + name + " appender.", true, true, false));
//		      }
//
//		    } catch(JMException e) {
//		      cat.error("Could not add appenderMBean for ["+name+"].", e);
//		    } catch(java.beans.IntrospectionException e) {
//		      cat.error("Could not add appenderMBean for ["+name+"].", e);
//		    } catch(RuntimeException e) {
//		      cat.error("Could not add appenderMBean for ["+name+"].", e);
//		    }
//		  }

	public static void main(String[] args) {
	
		//BasicConfigurator.configure();
		org.apache.log4j.Layout layout = new SimpleLayout();
		FileAppender appender = null;
		try {
		appender = new FileAppender(layout, "app.log");
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}
		Logger logger = Logger.getRootLogger();
		logger.addAppender(appender);

		MyTestApp app = new MyTestApp();
		
		HierarchyDynamicMBean hdm = new HierarchyDynamicMBean();
		
		try {
			ObjectName mbo = new ObjectName("log4j:hiearchy=root");
			try {
				server.registerMBean(hdm, mbo);
			} catch (InstanceAlreadyExistsException e) {
			
				e.printStackTrace();
			} catch (MBeanRegistrationException e) {
			
				e.printStackTrace();
			} catch (NotCompliantMBeanException e) {
			
				e.printStackTrace();
			}
			
		} catch (MalformedObjectNameException e1) {
		
			e1.printStackTrace();
		} catch (NullPointerException e1) {
		
			e1.printStackTrace();
		}
		
//		app.registerAppenderMBean1(appender);
		
		int portNumber=9393;
	    //ObjectName htmlName = new ObjectName("log4j:hiearchy=default,port=" + portNumber) ;
	   	ObjectName htmlName = null;
		try {
			htmlName = new ObjectName("log4j:logger=root,port=" + portNumber);
		} catch (MalformedObjectNameException e1) {
			
			e1.printStackTrace();
		} catch (NullPointerException e1) {
			
			e1.printStackTrace();
		}
	   	//ObjectName htmlName = new ObjectName("jmxexample:type=MyApp,port=" + portNumber) ;
	    HtmlAdaptorServer html = new HtmlAdaptorServer(portNumber);
	    html.setPort(portNumber);
	    try {
			server.registerMBean(html, htmlName);
		} catch (InstanceAlreadyExistsException e1) {

			e1.printStackTrace();
		} catch (MBeanRegistrationException e1) {
	
			e1.printStackTrace();
		} catch (NotCompliantMBeanException e1) {
		
			e1.printStackTrace();
		}
	    html.start();
		try {
			app.go();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
---------- END SOURCE ----------

Thanks
Vilas
Comment 1 Vilas 2010-07-14 07:38:12 UTC
We are using log4j to implement dynamic logging in our application.
Comment 2 Vilas 2010-07-15 02:37:59 UTC
Any advice on the same.