用log4j来输出log,但是程序中
同时启动了两个线程,同时用log4j写同一个log文件
发现有些时候,两个线程的输出会在同一个文件里,
有的时候只有一个线程的输出。
但是两个线程肯定是每时每刻都在运行的,按道理应该是
都会有输出的。为什么有的log文件只有一个线程的输出呢?

解决方案 »

  1.   

    不会用这种情况吧,用System.out.println()输出一下,看确定是两个线程都用运行吗?
      

  2.   

    是两个线程在同时运行。
    我打印出来了thread-name。看到的。
    因为我在写log的时候没有加getChannecl().lock()
    所以我估计有可能是因为两个线程之间互相覆盖了log内容
      

  3.   

    问题应该不再LOG4J
    因为你在LOG4J中注册的APPANDER只有一个
    也就是说你的输出缓冲只有一个,再多的线程也不会把数据冲掉吧估计还是代码有问题
      

  4.   

    你的意思是不是说,所有的log都被输出了。但是有可能
    输出缓冲只有一个,所以有可能log是杂乱无章的?
    比如Thread1:2010/11/26 09:08:05 xxxxxxxxx
    Thread1:2010/11/26 09:08:06 xxxxxxxxx
    Thread1:2010/11/26 09:08:07 xxxxxxxxx
    Thread2:2010/11/26 09:08:05 xxxxxxxxx
    Thread2:2010/11/26 09:08:06 xxxxxxxxx
    Thread1:2010/11/26 09:08:08 xxxxxxxxx
    Thread1:2010/11/26 09:08:09 xxxxxxxxx
    Thread2:2010/11/26 09:08:07 xxxxxxxxx