代码很简单,如下:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.*;import org.apache.log4j.*;public class B
{
static void w1()
{
Logger logger = Logger.getLogger("w1") ;
BasicConfigurator.configure();
logger.debug("Hello");
logger.info("ttt");
}

public static void main(String[] args)
{
w1();
w1();
w1();
}
}第1个w1()往控制台输出是正常的
Hello
ttt
但为什么第2个w1()输出是
Hello
Hello
ttt
ttt
但为什么第3个w1()输出是
Hello
Hello
Hello
ttt
ttt
ttt
第n个w1()输出是n个Hello和ttt
好象因为name都是w1的问题,哪位大哥能给详细解释一下吗?
我试着如果每次Logger.getLogger(name)都不同的话就正确了

解决方案 »

  1.   

    static void w1()
    wl是静态方法,在程序结束之前它的内存空间不会释放,
    你的二次调用的时候,第一次内存空间还存在,所以内存中就有两个;
    你把static修饰符去掉就行了
      

  2.   

    楼上的哥们说的不对啊
    1.把static修饰符去掉就不能在main()调用了, 
    2.即使把static修饰符去掉变成new B().w1();new B().w1();结果还是不对的
    3.我如果有个w2()跟w1()一样,那么w1();w2()结果还不对
    那位高人给解释解释啊
      

  3.   

    一般情况下应该这样用
    private static final Logger logger = Logger.getLogger(B.class);
      

  4.   

    你每次new一个map,然后把参数放到map中试试看!
      

  5.   

    把"Logger logger = Logger.getLogger("w1") ;"这句提出来试试
      

  6.   

    会不会是因为还没有 flush 完,你再申请一个时,就直接把上次的  Clone 了一个 给你?
      

  7.   

    to flyxxxxx(灭神): 谢谢,试过了,还是不对啊
    to liangzai6640459(亮仔): 谢谢,能不能说详细点啊
    to nintha(素一): 谢谢,单独提出来结果还是一样,不对啊
                      w1();
    w1();

    Logger logger = Logger.getLogger("w1");
    BasicConfigurator.configure();
    logger.debug("Hello");
    logger.info("ttt");
    to humanity(很健忘了): 请问如果没有flush完,那我该如何解决呢,谢谢了