/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.tools.gui.log4jquickconfig;
import java.awt.Color;
import java.awt.Frame;
import java.util.Properties;
import javax.swing.JDialog;
import javax.swing.JFrame;
import de.cismet.lookupoptions.options.CismetDeveloperOptionsPanel;
import de.cismet.tools.gui.StaticSwingTools;
/**
* DOCUMENT ME!
*
* @author thorsten.hell@cismet.de
* @version $Revision$, $Date$
*/
public class Log4JQuickConfig extends JDialog {
//~ Static fields/initializers ---------------------------------------------
private static Log4JQuickConfig log4jConfigurator = null;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup bgrWhat;
private javax.swing.JCheckBox chkConsole;
private javax.swing.JCheckBox chkFile;
private javax.swing.JCheckBox chkSockets;
private javax.swing.JButton cmdCancel;
private javax.swing.JButton cmdConfig;
private javax.swing.JButton cmdFile;
private de.cismet.tools.gui.GradientPanel gpnTitle;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JLabel lblFile;
private javax.swing.JLabel lblHost;
private javax.swing.JLabel lblPort;
private javax.swing.JPanel panButtons;
private javax.swing.JPanel panConfig;
private javax.swing.JPanel panTitle;
private javax.swing.JPanel panWhat;
private javax.swing.JPanel panWhere;
private javax.swing.JRadioButton rdbDebug;
private javax.swing.JRadioButton rdbDisable;
private javax.swing.JRadioButton rdbError;
private javax.swing.JRadioButton rdbFatal;
private javax.swing.JRadioButton rdbInfo;
private javax.swing.JRadioButton rdbWarn;
private javax.swing.JTextField txtFile;
private javax.swing.JTextField txtHost;
private javax.swing.JTextField txtPort;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form Log4JQuickConfig.
*/
public Log4JQuickConfig() {
super((Frame)null, true);
initComponents();
gpnTitle.setLeftColor(new Color(49, 66, 122));
gpnTitle.setRightColor(Color.white);
this.getRootPane().setDefaultButton(cmdConfig);
}
//~ Methods ----------------------------------------------------------------
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
bgrWhat = new javax.swing.ButtonGroup();
panConfig = new javax.swing.JPanel();
panWhat = new javax.swing.JPanel();
rdbDebug = new javax.swing.JRadioButton();
rdbInfo = new javax.swing.JRadioButton();
rdbWarn = new javax.swing.JRadioButton();
rdbError = new javax.swing.JRadioButton();
rdbFatal = new javax.swing.JRadioButton();
rdbDisable = new javax.swing.JRadioButton();
panWhere = new javax.swing.JPanel();
chkSockets = new javax.swing.JCheckBox();
lblHost = new javax.swing.JLabel();
txtHost = new javax.swing.JTextField();
lblPort = new javax.swing.JLabel();
txtPort = new javax.swing.JTextField();
chkFile = new javax.swing.JCheckBox();
lblFile = new javax.swing.JLabel();
txtFile = new javax.swing.JTextField();
cmdFile = new javax.swing.JButton();
chkConsole = new javax.swing.JCheckBox();
panTitle = new javax.swing.JPanel();
gpnTitle = new de.cismet.tools.gui.GradientPanel();
jLabel1 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
panButtons = new javax.swing.JPanel();
cmdCancel = new javax.swing.JButton();
cmdConfig = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
panConfig.setBorder(javax.swing.BorderFactory.createEmptyBorder(3, 3, 3, 3));
panConfig.setLayout(new java.awt.GridBagLayout());
panWhat.setBorder(javax.swing.BorderFactory.createCompoundBorder(
javax.swing.BorderFactory.createEmptyBorder(3, 3, 3, 3),
javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.panWhat.border.insideBorder.title")))); // NOI18N
panWhat.setLayout(new java.awt.GridBagLayout());
bgrWhat.add(rdbDebug);
rdbDebug.setSelected(true);
rdbDebug.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.rdbDebug.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbDebug, gridBagConstraints);
bgrWhat.add(rdbInfo);
rdbInfo.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.rdbInfo.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbInfo, gridBagConstraints);
bgrWhat.add(rdbWarn);
rdbWarn.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.rdbWarn.text")); // NOI18N
rdbWarn.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
rdbWarnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbWarn, gridBagConstraints);
bgrWhat.add(rdbError);
rdbError.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.rdbError.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbError, gridBagConstraints);
bgrWhat.add(rdbFatal);
rdbFatal.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.rdbFatal.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbFatal, gridBagConstraints);
bgrWhat.add(rdbDisable);
rdbDisable.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.rdbDisable.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 10);
panWhat.add(rdbDisable, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
gridBagConstraints.weighty = 1.0;
panConfig.add(panWhat, gridBagConstraints);
panWhere.setBorder(javax.swing.BorderFactory.createCompoundBorder(
javax.swing.BorderFactory.createEmptyBorder(3, 3, 3, 3),
javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.panWhere.border.insideBorder.title")))); // NOI18N
panWhere.setLayout(new java.awt.GridBagLayout());
chkSockets.setSelected(true);
chkSockets.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.chkSockets.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 0);
panWhere.add(chkSockets, gridBagConstraints);
lblHost.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.lblHost.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 2, 0);
panWhere.add(lblHost, gridBagConstraints);
txtHost.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.txtHost.text")); // NOI18N
txtHost.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
txtHostActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 9);
panWhere.add(txtHost, gridBagConstraints);
lblPort.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.lblPort.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 2, 0);
panWhere.add(lblPort, gridBagConstraints);
txtPort.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.txtPort.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 9);
panWhere.add(txtPort, gridBagConstraints);
chkFile.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.chkFile.text")); // NOI18N
chkFile.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
chkFileActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 0);
panWhere.add(chkFile, gridBagConstraints);
lblFile.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.lblFile.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.insets = new java.awt.Insets(0, 10, 2, 0);
panWhere.add(lblFile, gridBagConstraints);
txtFile.setEnabled(false);
txtFile.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
txtFileActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 9);
panWhere.add(txtFile, gridBagConstraints);
cmdFile.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.cmdFile.text")); // NOI18N
cmdFile.setEnabled(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 4;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 2, 3);
panWhere.add(cmdFile, gridBagConstraints);
chkConsole.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.chkConsole.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 2, 0);
panWhere.add(chkConsole, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
panConfig.add(panWhere, gridBagConstraints);
getContentPane().add(panConfig, java.awt.BorderLayout.CENTER);
panTitle.setLayout(new java.awt.GridBagLayout());
gpnTitle.setForeground(new java.awt.Color(236, 233, 216));
gpnTitle.setLeftColor(new java.awt.Color(49, 66, 122));
gpnTitle.setRightColor(new java.awt.Color(255, 255, 255));
gpnTitle.setLayout(new java.awt.GridBagLayout());
jLabel1.setFont(new java.awt.Font("Courier", 1, 24)); // NOI18N
jLabel1.setForeground(new java.awt.Color(236, 233, 216));
jLabel1.setText(org.openide.util.NbBundle.getMessage(Log4JQuickConfig.class, "Log4JQuickConfig.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gpnTitle.add(jLabel1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 75.0;
panTitle.add(gpnTitle, gridBagConstraints);
jPanel3.setBackground(new java.awt.Color(255, 255, 255));
jLabel2.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/de/cismet/tools/gui/log4jquickconfig/res/log4j.png"))); // NOI18N
jPanel3.add(jLabel2);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
panTitle.add(jPanel3, gridBagConstraints);
jPanel4.setBackground(new java.awt.Color(255, 255, 255));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 2.0;
gridBagConstraints.weighty = 1.0;
panTitle.add(jPanel4, gridBagConstraints);
getContentPane().add(panTitle, java.awt.BorderLayout.NORTH);
panButtons.setLayout(new java.awt.GridBagLayout());
cmdCancel.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.cmdCancel.text_1")); // NOI18N
cmdCancel.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdCancelActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 4, 4);
panButtons.add(cmdCancel, gridBagConstraints);
cmdConfig.setText(org.openide.util.NbBundle.getMessage(
Log4JQuickConfig.class,
"Log4JQuickConfig.cmdConfig.text")); // NOI18N
cmdConfig.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdConfigActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 4, 7);
panButtons.add(cmdConfig, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
panButtons.add(jPanel1, gridBagConstraints);
getContentPane().add(panButtons, java.awt.BorderLayout.SOUTH);
final java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width - 532) / 2, (screenSize.height - 335) / 2, 532, 335);
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void chkFileActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_chkFileActionPerformed
txtFile.setEnabled(chkFile.isSelected());
} //GEN-LAST:event_chkFileActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdConfigActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdConfigActionPerformed
final Properties p = new Properties();
p.put("log4j.appender.Remote", "org.apache.log4j.net.SocketAppender"); // NOI18N
p.put("log4j.appender.Remote.remoteHost", txtHost.getText()); // NOI18N
p.put("log4j.appender.Remote.port", txtPort.getText()); // NOI18N
p.put("log4j.appender.Remote.locationInfo", "true"); // NOI18N
p.put("log4j.appender.File", "org.apache.log4j.FileAppender"); // NOI18N
p.put("log4j.appender.File.file", txtFile.getText()); // NOI18N
p.put("log4j.appender.File.layout", "org.apache.log4j.HTMLLayout"); // NOI18N
p.put("log4j.appender.File.append", "true"); // NOI18N
p.put("log4j.appender.cismetConsole", "org.apache.log4j.ConsoleAppender"); // NOI18N
p.put("log4j.appender.cismetConsole.layout", "org.apache.log4j.PatternLayout"); // NOI18N
p.put("log4j.appender.cismetConsole.layout.ConversionPattern", "%-5p [%t] - %m%n"); // NOI18N
String level = "DEBUG"; // NOI18N
String target = ""; // NOI18N
if (chkSockets.isSelected()) {
target += "Remote,"; // NOI18N
}
if (chkFile.isSelected()) {
target += "File,"; // NOI18N
}
if (chkConsole.isSelected()) {
target += "cismetConsole,"; // NOI18N
}
target = target.substring(0, target.length() - 1);
if (rdbInfo.isSelected()) {
level = "INFO"; // NOI18N
} else if (rdbWarn.isSelected()) {
level = "WARN"; // NOI18N
} else if (rdbError.isSelected()) {
level = "ERROR"; // NOI18N
} else if (rdbFatal.isSelected()) {
level = "FATAL"; // NOI18N
} else if (rdbDisable.isSelected()) {
level = "DISABLED"; // NOI18N
}
p.put("log4j.rootLogger", level + "," + target); // NOI18N
org.apache.log4j.PropertyConfigurator.configure(p);
this.hide();
} //GEN-LAST:event_cmdConfigActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdCancelActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdCancelActionPerformed
this.hide();
} //GEN-LAST:event_cmdCancelActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void txtFileActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_txtFileActionPerformed
// TODO add your handling code here:
} //GEN-LAST:event_txtFileActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void txtHostActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_txtHostActionPerformed
// TODO add your handling code here:
} //GEN-LAST:event_txtHostActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void rdbWarnActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_rdbWarnActionPerformed
// TODO add your handling code here:
} //GEN-LAST:event_rdbWarnActionPerformed
/**
* DOCUMENT ME!
*
* @param args the command line arguments
*/
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Log4JQuickConfig.getSingletonInstance().setVisible(true);
}
});
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Log4JQuickConfig getSingletonInstance() {
if (log4jConfigurator == null) {
log4jConfigurator = new Log4JQuickConfig();
}
return log4jConfigurator;
}
/**
* DOCUMENT ME!
*/
public static void configure4LumbermillOnLocalhost() {
configure4LumbermillOnLocalhost("DEBUG");
}
/**
* DOCUMENT ME!
*
* @param level DOCUMENT ME!
*/
public static void configure4LumbermillOnLocalhost(final String level) {
configure4LumbermillOn("localhost", 4445);
}
/**
* DOCUMENT ME!
*
* @param host DOCUMENT ME!
* @param port DOCUMENT ME!
*/
public static void configure4LumbermillOn(final String host, final int port) {
configure4LumbermillOn(host, port, "DEBUG");
}
/**
* DOCUMENT ME!
*
* @param host DOCUMENT ME!
* @param port DOCUMENT ME!
* @param level DOCUMENT ME!
*/
public static void configure4LumbermillOn(final String host, final int port, final String level) {
final Properties p = new Properties();
p.put("log4j.appender.Remote", "org.apache.log4j.net.SocketAppender");
p.put("log4j.appender.Remote.remoteHost", host);
p.put("log4j.appender.Remote.port", Integer.toString(port));
p.put("log4j.appender.Remote.locationInfo", "true");
p.put("log4j.rootLogger", level + ",Remote");
org.apache.log4j.PropertyConfigurator.configure(p);
}
}