极速赛车APP下载

罗氏file max over_fileappender rollover_appender name

电脑杂谈  发布时间:2017-02-13 04:00:19  来源:网络整理

当一个记录日志的事件被发起时,logback 会将这个事件发送给 appender。appender 必须实现 ch。qos。logback。core。Appender 接口。这个接口的最重要的方法如下所示:

package ch.qos.logback.core;
  
import ch.qos.logback.core.spi.ContextAware;
import ch.qos.logback.core.spi.FilterAttachable;
import ch.qos.logback.core.spi.LifeCycle;
  

public intece Appender<E> extends LifeCycle, ContextAware, FilterAttachable {

  public String getName();
  public void setName(String name);
  void doAppend(E event);
}

这个接口的大多数方法都是 setter 和 getter,doAppend 方式是最重要的一个。这个类接收了一个泛型类型 E,在 logback-classic 模块里, E 的类型是 ILoggingEvent,在 logback-access 模块里,E 的类型是 AccessEvent。这个接口也继承了 FilterAttachable 接口,意味着可以为这个 appender 关联一个或者多个过滤器。appender 最终会根据 layout 或者 encoder 将日志信息格式化,并且只能关联一个 layout 或者 encoder,不过有一些 appender 已经有了内嵌的 layout 或者 encoder,比如说 SocketAppender。

ch.qos.logback.core.AppenderBase 这个类是一个抽象类,是其它具体 appender 的父类。

public synchronized void doAppend(E eventObject) {

  // prevent re-entry.
  if (guard) {
    return;
  }

  try {
    guard = true;

    if (!this.started) {
      if (statusRepeatCount++ < ALLOWED_REPEATS) {
        addStatus(new WarnStatus(
            "Attempted to append to non started appender [" + name + "].",this));
      }
      return;
    }

    if (getFilterChainDecision(eventObject) == FilterReply.DENY) {
      return;
    }
    
    // ok, we now invoke the derived class's implementation of append
    this.append(eventObject);

  } finally {
    guard = false;
  }
}

首先 doAppend 方法是 synchronized,保证了多线程访问这个 appender 时能起到互斥的作用,logback 也有非互斥的实现, ch。qos。logback。core。UnsynchronizedAppenderBase。


本文来自电脑杂谈,转载请注明本文网址:
http://www.0531mai.com/a/jisuanjixue/article-32110-1.html

发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

极速赛车手机官网 极速赛车APP 极速赛车APP 极速赛车APP下载 极速赛车APP下载 极速赛车APP 极速赛车手机官网 极速赛车双面盘 极速赛车双面盘 极速赛车APP下载