定义大概如下
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
先谢过
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
先谢过
public GuiAppender(String secendID) {
使用到secendID
}
也失败
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;
}
}
实际在程序在第一次遇到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);
}
在配置文件里面这么设置呢?
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>