加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – log4j:输出文件取决于源调用类

发布时间:2020-05-28 10:25:37 所属栏目:Java 来源:互联网
导读:假设我有一个公共类,其logger由其名称初始化:public class SomeCalculationLogic { private static final Log log = LogFactory.getLog(SomeCalculationLogic .class); public void doCalculation() { log.i

假设我有一个公共类,其logger由其名称初始化:

public class SomeCalculationLogic {
private static final Log log = LogFactory.getLog(SomeCalculationLogic .class);

public void doCalculation() {
    log.info("doing calculations...");
    ...
    }
}

这个类由两个逻辑上不同的流使用 – 比如从类“BackgroundTask”和“UserRequest”调用它.
如何使SomeCalculationLogic的记录器的输出重定向到不同的日志文件(如background.log和main.log),具体取决于调用类是什么? 最佳答案 我看到三种可能的方式:

>如果足以将所有消息记录到同一个文件中,但根据上下文对它们加以不同的前缀,以便它们变得易于过滤,则可以使用嵌套的诊断上下文,如a previous answer of mine中所述,
>如果你绝对需要有单独的日志文件,你可以用两个不同的记录器和相关的appender子类化你的类,正如Xavier建议的那样(不幸的是他的解决方案不能正常工作),
>或尝试this alternative solution.

子类化解决方案的工作实现将是这样的:

public class SomeCalculationLogic {
  protected abstract Log getLog();

  public void doCalculation() {
    getLog().info("doing calculations...");
    ...
  }
}

public class BackgroundCalculationLogic extends SomeCalculationLogic {
  private static Log log = LogFactory.getLog(BackgroundCalculationLogic.class);

  protected Log getLog() {
    return log;
  }
}

public class UserRequestCalculationLogic extends SomeCalculationLogic {
  private static Log log = LogFactory.getLog(UserRequestCalculationLogic.class);

  protected Log getLog() {
    return log;
  }
}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读