【问题标题】:Define a logger for a specific call hierarchy为特定调用层次结构定义记录器
【发布时间】:2010-03-25 12:13:08
【问题描述】:

目前我正在为我的应用程序开发 log4j 的东西。我有一个特定的日志记录要求。我需要为特定的调用层次结构定义一个记录器。 这意味着特定调用层次结构的所有日志消息都应该发送到特定的附加程序。

示例

AddFormAction(method1) ---|--- FormBusinessObject(method4) --|-- FormDAOObject(method5)

EditFormAction(method2) -----|---- FormBusinessObject(method4) --|-- FormDAOObject(method5)

DeleteFormAction(method3)----|--- FormBusinessObject(method4) --|-- FormDAOObject(method5)

我想为特定的调用层次结构 1 - 4 -5 定义一个记录器。这些消息应该转到 addform.log。

我不希望来自 2-4-5 或 3-4-5 调用层次结构的消息转到 addform.log。

希望我清楚我的要求。非常感谢任何帮助。提前感谢大家的回复。

【问题讨论】:

    标签: logging hierarchy


    【解决方案1】:

    我对 log4j 了解不多,但这听起来像是 AspectJ 的完美案例。

    【讨论】:

      【解决方案2】:

      一种方法是使用注入为依赖项提供它们的记录器实例。

       public bool addFormAction( .... form data .... ) {
           Logger logger = LogManager.getLogger( "AddFormLogger" );
           FormBusinessObject form = new FormBusinessObject( logger );
           form.setProperty1( parameter1 );
           form.save();
       }
      

      ...

       public class FormBusinessObject
       {
            private Logger logger;
      
            public FormBusinessObject() {
                logger = LogManager.GetLogger( "DefaultLogger" );
            }
      
            public FormBusinessObject( Logger logger ) {
                logger = logger;
            }
      
            ...
      
            public void save() {
                 logger.info( "Saving form" );
                 ...
            }
      }
      

      【讨论】:

      • 感谢您的回复,但我正在通过 spring 注入业务对象,因此我无法手动实例化 BO 对象。使用 Log4j 实现此目的的任何其他方式。
      • 我不确定。本质上,您需要做的是以某种方式设置一个全局上下文,允许您在业务和 DAO 对象中使用某种工厂来获取正确的记录器。工厂可以注入 Spring。我很想使用工厂可以访问并返回正确记录器的单例上下文。这只有在应用程序是单线程的或者单例跟踪每个线程的上下文时才有效。
      • FWIW,我交谈过的每个人都做记录器/类而不是记录器/活动。通常,如果我需要知道我正在执行什么活动,我只是依靠堆栈跟踪来为我提供上下文。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多