定义大概如下
public class GuiAppender extends AppenderSkeleton
   public String secendID;
   protected void append(LoggingEvent event)
   public GuiAppender() {
       使用到secendID
   }
   public String getSecendID()   public void setSecendID(String secendID)
总的来是就是我想在初始化的时候传个String给secendID 
我在log4j.properties尝试这样。失败了
DBLOG 是我的logger
log4j.appender.DBLOG.secendID=DBPOOL
先谢过

解决方案 »

  1.   

    忘了补充
    public GuiAppender(String secendID) {
           使用到secendID
       }
    也失败
      

  2.   

    package jp.or.nurs.sug.log4j.appender;import org.apache.log4j.AppenderSkeleton;
    import org.apache.log4j.Layout;
    import org.apache.log4j.spi.LoggingEvent;import javax.swing.DefaultListModel;
    import javax.swing.ListModel;public class JListAppender extends AppenderSkeleton {
    private DefaultListModel model; public JListAppender() {
    // super() was deprecated
    super(true);
    } public JListAppender(final Layout layout) {
    super(true);
    setLayout(layout);
    activateOptions();
    } public ListModel getModel() {
    return model;
    } public void setModel(ListModel model) {
    this.model = (DefaultListModel) model;
    } public void activateOptions() {
    if (model == null) {
    model = new DefaultListModel();
    }
    } protected void append(LoggingEvent event) {
    if (layout == null) {
    model.addElement(event);
    } else {
    model.addElement(layout.format(event));
    }
    } public void close() {
    clearModel();
    } public void clearModel() {
    model.clear();
    } public boolean requiresLayout() {
    return false;
    }
    }
      

  3.   

    trumf能不能说详细点?layout怎么传进去?
    实际在程序在第一次遇到private final static Log log = LogFactory.getLog(.....);
    它就自动创建log4j.appender.XXX=XXXXXX 的对象
    那么如何让它通过你这个构造方法
    public JListAppender(final Layout layout) {
    super(true);
    setLayout(layout);
    activateOptions();
    }
    而不是默认的
    public JListAppender() {
    // super() was deprecated
    super(true);

    在配置文件里面这么设置呢?
      

  4.   

    不好意思,好久没来了,没能即时回复。1. 可以在给自定义的Appender初始化的时候设定layout,    private void setupLogger( ) {
    Logger root = Logger.getRootLogger();
    JListAppender list = getJListAppender( root );
    if( list == null ) {
        // 在这里对JListAppender进行初始化
        Layout layout = new PatternLayout( "%d %5p %c{1} - %m%n" );
        list = new JListAppender( layout );
        list.activateOptions();
        root.addAppender( list );
    }
    // Model
    // model = list.getModel();
            // ...
        }2. 也可以通过配置文件来设定layout:(xml例)  <appender name="jlist" class="sea.log4j.JListAppender(自定义的Appdener类)" >
         <model class="sea.log4j.appender.model.MyListModel" /> (自定义的Model类)
         <layout class="org.apache.log4j.PatternLayout">(这里设定layout)
            <param name="ConversionPattern" value="%d %5p %c - %m" />
         </layout>
      </appender>