V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
miracleyao
V2EX  ›  问与答

Log4j 是输出日志时是如何获知当前方法、行号的?

  •  
  •   miracleyao · 2016-07-04 17:08:39 +08:00 · 3768 次点击
    这是一个创建于 3051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前项目中需要对 Log4j 封装一层,比如有个日志工具类 LoggerUtil ,里面有 info 、 debug 、 warn 、 error 等静态方法,在需要打日志的代码处我们只需要调用 LoggerUtil.info()便可以。

    但是这样存在一个问题,无法正确打印需要打日志的地方,即 Test.java 在 15 行处调用了 LoggerUtil.info(),日志打印得是 LoggerUtil 中调用的行数,而不会正确打印 Test 中调用的地方,现在我需要进行改造,比如获知当前方法、行号的方式,请问大家在项目中封装过日志类吗?

    5 条回复    2016-07-05 09:43:15 +08:00
    justjavac
        1
    justjavac  
       2016-07-04 17:10:55 +08:00 via Android
    这个属于 java 基础了吧
    xinyewdz
        2
    xinyewdz  
       2016-07-04 17:56:03 +08:00
    log4j 是通过抛出异常获取行号和方法的。以前的公司做法是,把当前 class 传到方法里面,只打印出类名,不打印行号和方法名。
    SoloCompany
        3
    SoloCompany  
       2016-07-04 22:51:45 +08:00
    直接构造 LogRecord 啊,剩下的你自己查 javadoc 吧
    yinheli
        4
    yinheli  
       2016-07-05 01:40:44 +08:00
    miracleyao
        5
    miracleyao  
    OP
       2016-07-05 09:43:15 +08:00
    @yinheli 谢谢,就是根据这个改造了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 21:29 · PVG 05:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.