方法1:
我自己用的时候都是写一个Log类里面对log4j大概封装了一下!
public static void runLoger(int level,String info)
{
case 1
logger.debug(info);
.
.
.
case 4
logger.error(info);
}
然后需要写日志调用的时候,调用类似下面的
Log.runLoger(1,"print info");

方法2:

但是我看很多人用的时候,都在该类的最开始写类似下面这句
public static Logger logger = org.apache.log4j.Logger.getLogger(该类的类名.class.getName());
然后需要写日志的时候,调用类似下面的语句写日志
logger.error("errorInfo");
但是我基本没看到我这样写的人!我感觉我这种写法很简单起码不用每个需要写日志的类都要写
上public static Logger logger = org.apache.log4j.Logger.getLogger(该类的类名.class.getName());
这么一句!但是我看别人没这样用的。我想是不是我这样用牵扯并发写log文件问题;不知道我这样用到底
行不行?有没有什么问题啊?

解决方案 »

  1.   

    别人这么写 
    是log4j推荐的做法你的做法也可以显示log
    但是你没法设置 该类的类名=error
    即可以对某类进行单独设置 类的log优先级
      

  2.   

    public static Logger logger = org.apache.log4j.Logger.getLogger(该类的类名.class.getName()); 
    你看看这里就明白了撒,这样获得的logger可以根据具体的类来指定,如上所说,这样就可以对单个类进行定制了
      

  3.   

    你的做法也可以显示log  
    但是你没法设置 该类的类名=error  
    即可以对某类进行单独设置 类的log优先级没看明白啊。。能具体说说么?
      

  4.   

    我们去年自己做了个LOG类库,有点小研究.挖哈哈
    public static Logger logger = org.apache.log4j.Logger.getLogger(该类的类名.class.getName()); 
    人家在这里用了一个singleton的设计模式.只允许有一个对象实例.每个名字都对应一个LOGGER对象.
    每个logger都有自己的目的地,屏幕,文件,远程...好象是appender吧.都在配置文件中写明的.由于可以有多个,所以每个logger在写时,都应该得到自己的引用来写,否则,像你这样写是达不到效果的.
      

  5.   

    比如某一个类(aaa.bbb.ccc.Xyz)的日志级别与其他的不一样,就可以设为:log4j.logger.aaa.bbb.ccc.Xyz=DEBUG这样就可以单独地对这个类进行配置了,而 log4j.logger. 后面的就是根据日志记录器的名字来判断的。你的方法 1 的不好之处在于:1,没有办法对日志记录器进行命名,你现在只有统一的名字。
    2,在输出日志级别提高后,没有一定的检测手段来判断日志级别,得让 Log4j 去判断,像这样:         if (log.isDebugEnabled()) {
                log.debug("xxxxxx");
            }这种做法可以提高一些效率,当然了,方法 1 中也可以这样子用,但是方法 1 不能解决 1 的问题。
      

  6.   

    大火龙
    你的msn是什么啊。。我觉得你好强啊
      

  7.   

    2,在输出日志级别提高后,没有一定的检测手段来判断日志级别,得让 Log4j 去判断,像这样: 
    但我没明白这是什么意思?public static void runLoger(int level,String info) 

    case 1 
    logger.debug(info); 



    case 4 
    logger.error(info); 
    } 我这样不就根据级别打印了码?
      

  8.   

    if (log.isDebugEnabled()) {
       log.debug("xxxxxx");
    }如果日志级别在 info 时,就不执行 log.debug 了,如果没有这个判断,
    就会执行 log.debug,实际上这句是白执行的,其在执行时才会去检查日
    志级别是否满足,不满足则不输出。在一些开源框架的代码中都是这么写的。
      

  9.   

    呵呵,不要说我强,我的专家分都很水的,做 Java 还不到一年。
      

  10.   

    最主要的问题就是你的日志不能记录是哪个类打印的日志,这样的话打印的日志的意义何在.
    不知道多传一个参数进来是否可行
    public static void runLoger(int level,String info,String name) 

    org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(name);  
    case 1 
    logger.debug(info); 



    case 4 
    logger.error(info); 

      

  11.   

    public static void runLoger(int level,String info) 

    case 1 
    logger.debug(info); 



    case 4 
    logger.error(info); 
    } 火龙啊你意思我如果这样写的话.如果我在log4j里面,虽然设置成只打印error级别,但是后台还会什么级别的日志都打印出来?