<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FLanguage_Basics%2FLog4j</id>
		<title>Java/Language Basics/Log4j - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FLanguage_Basics%2FLog4j"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Log4j&amp;action=history"/>
		<updated>2026-04-22T01:53:49Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Language_Basics/Log4j&amp;diff=7515&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Log4j&amp;diff=7515&amp;oldid=prev"/>
				<updated>2010-06-01T06:47:14Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:47, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Language_Basics/Log4j&amp;diff=7514&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Language_Basics/Log4j&amp;diff=7514&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== and assign level and appender to your own logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.foo=DEBUG,FILE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== define a named logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.dataAccessLogger = com.apress.logging.logger&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== define the appender named CONSOLE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&lt;br /&gt;
log4j.appender.CONSOLE.conversionPattern=%m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== define the appender named FILE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=${user.home}/log.out&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== define the root logger with two appenders writing to console and file ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger = DEBUG, CONSOLE, FILE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== define your own logger named com.foo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example log4j Configuration File  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
//Example log4j Configuration File &lt;br /&gt;
/*&lt;br /&gt;
#set the level of the root logger to DEBUG and set its appender&lt;br /&gt;
as an appender named X&lt;br /&gt;
log4j.rootLogger = DEBUG, X&lt;br /&gt;
#set the appender named X to be a console appender&lt;br /&gt;
log4j.appender.X=org.apache.log4j.ConsoleAppender&lt;br /&gt;
#set the layout for the appender X&lt;br /&gt;
log4j.appender.X.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.X.layout.conversionPattern=%m%n&lt;br /&gt;
*/&lt;br /&gt;
// Complex log4j Configuration File&lt;br /&gt;
/*&lt;br /&gt;
# define the root logger with two appenders writing to console and file&lt;br /&gt;
log4j.rootLogger = DEBUG, CONSOLE, FILE&lt;br /&gt;
#define your own logger named com.foo&lt;br /&gt;
log4j.logger.ru.foo=com.foo.MyLogger&lt;br /&gt;
#assign appender to your own logger&lt;br /&gt;
log4j.logger.ru.foo.appender=FILE&lt;br /&gt;
#define the appender named&lt;br /&gt;
FILE log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=${user.home}/log.out&lt;br /&gt;
#define the appender named CONSOLE&lt;br /&gt;
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&lt;br /&gt;
log4j.appender.CONSOLE.conversionPattern=%m%n&lt;br /&gt;
log4j.properties&lt;br /&gt;
&lt;br /&gt;
#set the level of the root logger to DEBUG (the lowest level) and&lt;br /&gt;
set its appender&lt;br /&gt;
#as an appender named X&lt;br /&gt;
log4j.rootLogger = DEBUG, X&lt;br /&gt;
#set your own logger&lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, X&lt;br /&gt;
#set the appender named X to be a console appender&lt;br /&gt;
log4j.appender.X=org.apache.log4j.ConsoleAppender&lt;br /&gt;
#set the layout for the appender X&lt;br /&gt;
log4j.appender.X.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.X.layout.conversionPattern=%p-%m%n&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== html.properties: configuring the custom logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, FILE&lt;br /&gt;
log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=htmlLayout.html&lt;br /&gt;
log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout&lt;br /&gt;
log4j.appender.FILE.layout.Title=HTML Layout Demo&lt;br /&gt;
log4j.appender.FILE.layout.LocationInfo=true&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== jdbc.properties configuration file for log4j ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
#configuring the custom logger&lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, DB&lt;br /&gt;
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender&lt;br /&gt;
log4j.appender.DB.URL=jdbc:odbc:dbdef&lt;br /&gt;
log4j.appender.DB.user=system&lt;br /&gt;
log4j.appender.DB.password=manager&lt;br /&gt;
log4j.appender.DB.sql=INSERT INTO LOGGING_DATA VALUES(&amp;quot;%x&amp;quot;,&amp;quot;%d{yyyy-MM-dd}&amp;quot;,&amp;quot;%C&amp;quot;,&amp;quot;%p&amp;quot;,&amp;quot;%m&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== jms.properties configuration file for JMS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
#configuring the custom logger&lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, JMS&lt;br /&gt;
#configuring the JMS appender&lt;br /&gt;
log4j.appender.JMS=org.apache.log4j.net.JMSAppender&lt;br /&gt;
log4j.appender.JMS.topicConnectionFactoryBindingName=TopicConnectionFactory&lt;br /&gt;
log4j.appender.JMS.topicBindingName=loggingTopic&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: A complete example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.log4j.or.ObjectRenderer;&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
import org.apache.log4j.spi.Filter;&lt;br /&gt;
import org.apache.log4j.spi.LoggingEvent;&lt;br /&gt;
class CustomerOrder {&lt;br /&gt;
  /** Holds value of property productName. */&lt;br /&gt;
  private String productName;&lt;br /&gt;
  /** Holds value of property productCode. */&lt;br /&gt;
  private int productCode;&lt;br /&gt;
  /** Holds value of property productPrice. */&lt;br /&gt;
  private int productPrice;&lt;br /&gt;
  /** Creates a new instance of CustomerOrder */&lt;br /&gt;
  public CustomerOrder() {&lt;br /&gt;
  }&lt;br /&gt;
  public CustomerOrder(String name, int code, int price) {&lt;br /&gt;
    this.productCode = code;&lt;br /&gt;
    this.productPrice = price;&lt;br /&gt;
    this.productName = name;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Getter for property productName.&lt;br /&gt;
   * &lt;br /&gt;
   * @return Value of property productName.&lt;br /&gt;
   */&lt;br /&gt;
  public String getProductName() {&lt;br /&gt;
    return this.productName;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Setter for property productName.&lt;br /&gt;
   * &lt;br /&gt;
   * @param productName&lt;br /&gt;
   *            New value of property productName.&lt;br /&gt;
   */&lt;br /&gt;
  public void setProductName(String productName) {&lt;br /&gt;
    this.productName = productName;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Getter for property productCode.&lt;br /&gt;
   * &lt;br /&gt;
   * @return Value of property productCode.&lt;br /&gt;
   */&lt;br /&gt;
  public int getProductCode() {&lt;br /&gt;
    return this.productCode;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Setter for property productCode.&lt;br /&gt;
   * &lt;br /&gt;
   * @param productCode&lt;br /&gt;
   *            New value of property productCode.&lt;br /&gt;
   */&lt;br /&gt;
  public void setProductCode(int productCode) {&lt;br /&gt;
    this.productCode = productCode;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Getter for property productPrice.&lt;br /&gt;
   * &lt;br /&gt;
   * @return Value of property productPrice.&lt;br /&gt;
   */&lt;br /&gt;
  public int getProductPrice() {&lt;br /&gt;
    return this.productPrice;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Setter for property productPrice.&lt;br /&gt;
   * &lt;br /&gt;
   * @param productPrice&lt;br /&gt;
   *            New value of property productPrice.&lt;br /&gt;
   */&lt;br /&gt;
  public void setProductPrice(int productPrice) {&lt;br /&gt;
    this.productPrice = productPrice;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ProductFilter extends Filter {&lt;br /&gt;
  /** Creates a new instance of ProductFilter */&lt;br /&gt;
  public ProductFilter() {&lt;br /&gt;
  }&lt;br /&gt;
  public int decide(LoggingEvent event) {&lt;br /&gt;
    int result = this.ACCEPT;&lt;br /&gt;
    //obtaining the message object passed through Logger&lt;br /&gt;
    Object message = event.getMessage();&lt;br /&gt;
    //checking if the message object is of correct type&lt;br /&gt;
    if (message instanceof CustomerOrder) {&lt;br /&gt;
      CustomerOrder order = (CustomerOrder) message;&lt;br /&gt;
      int productCode = order.getProductCode();&lt;br /&gt;
      //checking for the product code greater than 100 only&lt;br /&gt;
      if (productCode &amp;lt; 100) {&lt;br /&gt;
        result = this.DENY;&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      //this filter can ignore this, pass to next filter&lt;br /&gt;
      result = this.NEUTRAL;&lt;br /&gt;
    }&lt;br /&gt;
    return result;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OrderRenderer implements ObjectRenderer {&lt;br /&gt;
  private static final String separator = &amp;quot;-&amp;quot;;&lt;br /&gt;
  /** Creates a new instance of OrderRenderer */&lt;br /&gt;
  public OrderRenderer() {&lt;br /&gt;
  }&lt;br /&gt;
  public String doRender(Object obj) {&lt;br /&gt;
    StringBuffer buffer = new StringBuffer(50);&lt;br /&gt;
    CustomerOrder order = null;&lt;br /&gt;
    String productName = null;&lt;br /&gt;
    int productCode = 0;&lt;br /&gt;
    int productPrice = 0;&lt;br /&gt;
    //check if the instance is of correct type CustomerOrder&lt;br /&gt;
    if (obj instanceof CustomerOrder) {&lt;br /&gt;
      order = (CustomerOrder) obj;&lt;br /&gt;
      productName = order.getProductName();&lt;br /&gt;
      productCode = order.getProductCode();&lt;br /&gt;
      productPrice = order.getProductPrice();&lt;br /&gt;
      buffer.append(productName);&lt;br /&gt;
      buffer.append(separator);&lt;br /&gt;
      buffer.append(new Integer(productCode).toString());&lt;br /&gt;
      buffer.append(separator);&lt;br /&gt;
      buffer.append(new Integer(productPrice).toString());&lt;br /&gt;
    }&lt;br /&gt;
    return buffer.toString();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class ProductFilterDemo {&lt;br /&gt;
  private static Logger logger = Logger.getLogger(&amp;quot;name&amp;quot;);&lt;br /&gt;
  /** Creates a new instance of ProductFilterDemo */&lt;br /&gt;
  public ProductFilterDemo() {&lt;br /&gt;
  }&lt;br /&gt;
  public void processOrder(CustomerOrder order) {&lt;br /&gt;
    logger.info(order);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    CustomerOrder order1 = new CustomerOrder(&amp;quot;Beer&amp;quot;, 101, 20);&lt;br /&gt;
    CustomerOrder order2 = new CustomerOrder(&amp;quot;Lemonade&amp;quot;, 95, 10);&lt;br /&gt;
    CustomerOrder order3 = new CustomerOrder(&amp;quot;Chocolate&amp;quot;, 223, 5);&lt;br /&gt;
    ProductFilterDemo demo = new ProductFilterDemo();&lt;br /&gt;
    demo.processOrder(order1);&lt;br /&gt;
    demo.processOrder(order2);&lt;br /&gt;
    demo.processOrder(order3);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//filter_properties.xml&lt;br /&gt;
/*&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!DOCTYPE log4j:configuration SYSTEM&lt;br /&gt;
 * &amp;quot;log4j.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;log4j:configuration xmlns:log4j=&amp;quot;http://jakarta.apache.org/log4j/&amp;quot;&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;renderer renderedClass=&amp;quot;com.apress.business.CustomerOrder&amp;quot;&lt;br /&gt;
 * renderingClass=&amp;quot;com.apress.logging.log4j.renderer.OrderRenderer&amp;quot;&amp;gt; &amp;lt;/renderer&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;appender name=&amp;quot;A1&amp;quot; class=&amp;quot;org.apache.log4j.ConsoleAppender&amp;quot;&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;layout class=&amp;quot;org.apache.log4j.PatternLayout&amp;quot;&amp;gt; &amp;lt;param&lt;br /&gt;
 * name=&amp;quot;ConversionPattern&amp;quot; value=&amp;quot;%t %-5p %c{2} - %m%n&amp;quot;/&amp;gt; &amp;lt;/layout&amp;gt; &amp;lt;filter&lt;br /&gt;
 * class=&amp;quot;com.apress.logging.log4j.filter.ProductFilter&amp;quot;/&amp;gt; &amp;lt;/appender&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;logger name=&amp;quot;com.apress.logging.log4j&amp;quot;&amp;gt; &amp;lt;level value=&amp;quot;debug&amp;quot;/&amp;gt; &amp;lt;appender-ref&lt;br /&gt;
 * ref=&amp;quot;A1&amp;quot;/&amp;gt; &amp;lt;/logger&amp;gt; &amp;lt;/log4j:configuration&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: advanced log ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
import org.apache.log4j.NDC;&lt;br /&gt;
public class AdvancedLogging {&lt;br /&gt;
  private static Logger logger = Logger.getLogger(&amp;quot;name&amp;quot;);&lt;br /&gt;
  private String userName = null;&lt;br /&gt;
  private double balance;&lt;br /&gt;
  /** Creates a new instance of AdvancedLogging */&lt;br /&gt;
  public AdvancedLogging(String user) {&lt;br /&gt;
    this.userName = user;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Deposit some amount&lt;br /&gt;
   */&lt;br /&gt;
  public void deposit(double amount) {&lt;br /&gt;
    NDC.push(userName);&lt;br /&gt;
    balance += amount;&lt;br /&gt;
    logger.info(&amp;quot;Deposited &amp;quot; + amount + &amp;quot; new balance: &amp;quot; + balance);&lt;br /&gt;
    NDC.pop();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * withdraw some amount&lt;br /&gt;
   */&lt;br /&gt;
  public void withdraw(double amount) {&lt;br /&gt;
    NDC.push(userName);&lt;br /&gt;
    if (balance &amp;gt;= amount) {&lt;br /&gt;
      balance -= amount;&lt;br /&gt;
      logger.info(&amp;quot;Withdrawn &amp;quot; + amount + &amp;quot; new balance: &amp;quot; + balance);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.out.println(&amp;quot;Not enough balance&amp;quot;);&lt;br /&gt;
      logger.error(&amp;quot;Failed to withdraw: balance: &amp;quot; + balance&lt;br /&gt;
          + &amp;quot; attempted withdraw: &amp;quot; + amount);&lt;br /&gt;
    }&lt;br /&gt;
    NDC.pop();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    AdvancedLogging demo = new AdvancedLogging(&amp;quot;sam&amp;quot;);&lt;br /&gt;
    demo.deposit(100.50);&lt;br /&gt;
    demo.withdraw(80);&lt;br /&gt;
    demo.withdraw(50);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: asynchronous log  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import org.apache.log4j.AsyncAppender;&lt;br /&gt;
import org.apache.log4j.ConsoleAppender;&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
public class AsyncLogging {&lt;br /&gt;
  private static Logger logger = Logger.getLogger(&amp;quot;name&amp;quot;);&lt;br /&gt;
  private AsyncAppender asyncAppender = null;&lt;br /&gt;
  private ConsoleAppender consoleAppender = null;&lt;br /&gt;
  /** Creates a new instance of AsyncLogging */&lt;br /&gt;
  public AsyncLogging() {&lt;br /&gt;
    try {&lt;br /&gt;
      logger.setAdditivity(false);&lt;br /&gt;
      asyncAppender = (AsyncAppender) logger.getRootLogger().getAppender(&lt;br /&gt;
          &amp;quot;ASYNC&amp;quot;);&lt;br /&gt;
      asyncAppender.setBufferSize(4);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.out.println(&amp;quot;error: &amp;quot; + e.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method simply logs the messages&lt;br /&gt;
   */&lt;br /&gt;
  public void doLogging() {&lt;br /&gt;
    logger.debug(&amp;quot;Hello 1&amp;quot;);&lt;br /&gt;
    logger.debug(&amp;quot;Hello 2&amp;quot;);&lt;br /&gt;
    logger.debug(&amp;quot;Hello 3&amp;quot;);&lt;br /&gt;
    //logger.debug(&amp;quot;Hello 4&amp;quot;);&lt;br /&gt;
    //logger.debug(&amp;quot;Hello 5&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * the main method&lt;br /&gt;
   */&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    AsyncLogging demo = new AsyncLogging();&lt;br /&gt;
    demo.doLogging();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j config file: configuring the appender CONSOLE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&lt;br /&gt;
log4j.appender.CONSOLE.layout=org.apache.log4j.TTCCLayout&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j config file: configuring the layout TTCCLayout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE.layout.ThreadPrinting=false&lt;br /&gt;
og4j.appender.CONSOLE.layout.ContextPrinting=false&lt;br /&gt;
log4j.appender.CONSOLE.layout.CategoryPrefixing=false&lt;br /&gt;
log4j.appender.CONSOLE.layout.DateFormat=RELATIVE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j config file: configuring the named logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, CONSOLE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j config file: configuring the root logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger=DEBUG, CONSOLE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: assign appender to your own logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.foo.appender=FILE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: define the appender named ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
FILE log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=${user.home}/log.out&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: define the appender named CONSOLE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&lt;br /&gt;
log4j.appender.CONSOLE.conversionPattern=%m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: define the root logger with two appenders writing to console and file ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger = DEBUG, CONSOLE, FILE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: define your own logger named com.foo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.foo=com.foo.MyLogger&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: set the appender named X to be a console appender ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.X=org.apache.log4j.ConsoleAppender&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: set the layout for the appender X ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.X.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.X.layout.conversionPattern=%m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j Configuration File: #set the level of the root logger to DEBUG and set its appender as an appender named X ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger = DEBUG, X&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: File Based Logg Demo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.log4j.*;&lt;br /&gt;
public class FileBasedLoggingDemo implements Runnable {&lt;br /&gt;
  private static Logger logger = Logger.getLogger(&amp;quot;filename&amp;quot;);&lt;br /&gt;
  /** Creates a new instance of FileBasedLoggingDemo */&lt;br /&gt;
  public FileBasedLoggingDemo() {&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method is called by the application. This method creates a new&lt;br /&gt;
   * thread to start logging&lt;br /&gt;
   */&lt;br /&gt;
  public void doLogging() {&lt;br /&gt;
    Thread t = new Thread(this);&lt;br /&gt;
    t.start();&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * The thread&amp;quot;s run() method, which does repeated logging at an interval of&lt;br /&gt;
   * 60secs.&lt;br /&gt;
   */&lt;br /&gt;
  public void run() {&lt;br /&gt;
    int count = 1;&lt;br /&gt;
    while (true) {&lt;br /&gt;
      //logging information&lt;br /&gt;
      try {&lt;br /&gt;
        logger.debug(&amp;quot;Logging the information...&amp;quot; + count);&lt;br /&gt;
        Thread.sleep(60 * 1000);&lt;br /&gt;
        count++;&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        logger.warn(&amp;quot;Exception occured&amp;quot;, e);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * the main method&lt;br /&gt;
   */&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    FileBasedLoggingDemo demo = new FileBasedLoggingDemo();&lt;br /&gt;
    demo.doLogging();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: layout demo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
import org.apache.log4j.ConsoleAppender;&lt;br /&gt;
import org.apache.log4j.TTCCLayout;&lt;br /&gt;
import org.apache.log4j.NDC;&lt;br /&gt;
public class LayoutDemo {&lt;br /&gt;
  private static Logger logger = Logger.getLogger(&amp;quot;name&amp;quot;);&lt;br /&gt;
  private ConsoleAppender appender = null;&lt;br /&gt;
  private TTCCLayout layout = null;&lt;br /&gt;
  /** Creates a new instance of LayoutDemo */&lt;br /&gt;
  public LayoutDemo() {&lt;br /&gt;
    //set the parent additivity to false&lt;br /&gt;
    logger.setAdditivity(false);&lt;br /&gt;
    //initialize the layout&lt;br /&gt;
    layout = new TTCCLayout(&amp;quot;yyyy-MM-dd&amp;quot;);&lt;br /&gt;
    //initialize the console appender with the layout&lt;br /&gt;
    appender = new ConsoleAppender(layout, &amp;quot;System.out&amp;quot;);&lt;br /&gt;
    //adding the console appender to the logger&lt;br /&gt;
    logger.addAppender(appender);&lt;br /&gt;
  }&lt;br /&gt;
  public void computeSquareRoot(double number) {&lt;br /&gt;
    NDC.push(new Double(number).toString());&lt;br /&gt;
    double sqrt = Math.sqrt(number);&lt;br /&gt;
    logger.info(&amp;quot;The sqrt value: &amp;quot; + sqrt);&lt;br /&gt;
    NDC.pop();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    LayoutDemo demo = new LayoutDemo();&lt;br /&gt;
    demo.ruputeSquareRoot(22);&lt;br /&gt;
    demo.ruputeSquareRoot(44);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: log and servlet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
import javax.servlet.http.*;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.log4j.*;&lt;br /&gt;
public class LoggingServlet extends HttpServlet {&lt;br /&gt;
    private static Logger logger =Logger.getLogger(LoggingServlet.class);&lt;br /&gt;
    public void doPost(HttpServletRequest req, HttpServletResponse res)&lt;br /&gt;
                       throws IOException, ServletException&lt;br /&gt;
    {&lt;br /&gt;
        logger.info(&amp;quot;invoked the LoggingServlet...&amp;quot;);&lt;br /&gt;
        PrintWriter writer = res.getWriter();&lt;br /&gt;
        writer.println(&amp;quot;Check your web server console...&amp;quot;);&lt;br /&gt;
        writer.flush();&lt;br /&gt;
        writer.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: daily layout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.DAILY.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.DAILY.layout.conversionPattern=%p - %m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: file layout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.FILE.layout.conversionPattern=%p - %m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties:  rolling layout ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.ROLLING.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.ROLLING.layout.conversionPattern=%p - %m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the appender CONSOLE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the appender DAILY ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.DAILY=org.apache.log4j.DailyRollingFileAppender&lt;br /&gt;
log4j.appender.DAILY.File=${user.home}/daily.log&lt;br /&gt;
log4j.appender.DAILY.DatePattern=&amp;quot;.&amp;quot; yyyy-MM-dd-HH-mm&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the appender FILE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=${user.home}/out.log&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the appender ROLLING ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.ROLLING=org.apache.log4j.RollingFileAppender&lt;br /&gt;
log4j.appender.ROLLING.File=${user.home}/rolling.log&lt;br /&gt;
log4j.appender.ROLLING.MaxFileSize=1KB&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the layout for the appenders ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.CONSOLE.layout.conversionPattern=%p - %m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set the level of the root logger to DEBUG (the lowest level) and set its appenders named DEBUG and CONSOLE ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger = DEBUG, CONSOLE&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j.properties: set your own logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, FILE, ROLLING, DAILY&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== log4j: simple log ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
/*&lt;br /&gt;
Logging In Java with the JDK 1.4 Logging API and Apache log4j&lt;br /&gt;
by Samudra Gupta    &lt;br /&gt;
Apress Copyright 2003 &lt;br /&gt;
ISBN:1590590996&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.log4j.Logger;&lt;br /&gt;
public class SimpleLogging {&lt;br /&gt;
    /** Creates a new instance of SimpleLogging */&lt;br /&gt;
    public SimpleLogging() {&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * @param args the command line arguments&lt;br /&gt;
     */&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        Logger logger =Logger.getLogger(&amp;quot;name&amp;quot;);&lt;br /&gt;
        logger.info(&amp;quot;Hello this is an info message&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logging Servlet with log4j ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
import javax.servlet.http.*;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.log4j.*;&lt;br /&gt;
public class LoggingServlet extends HttpServlet {&lt;br /&gt;
    private static Logger logger = Logger.getLogger(LoggingServlet.class);&lt;br /&gt;
    public void doPost(HttpServletRequest req, HttpServletResponse res)&lt;br /&gt;
                       throws IOException, ServletException&lt;br /&gt;
    {&lt;br /&gt;
        logger.info(&amp;quot;invoked the LoggingServlet...&amp;quot;);&lt;br /&gt;
        PrintWriter writer = res.getWriter();&lt;br /&gt;
        writer.println(&amp;quot;Check your web server console...&amp;quot;);&lt;br /&gt;
        writer.flush();&lt;br /&gt;
        writer.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nt.properties for NT configuration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
#configuring the custom logger&lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, NT&lt;br /&gt;
#configuring the NT appender&lt;br /&gt;
log4j.appender.NT=org.apache.log4j.nt.NTEventLogAppender&lt;br /&gt;
log4j.appender.NT.layout=org.apache.log4j.SimpleLayout&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pass the configuration file and configuration class ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
java -Dlog4j.configuration=config file yourApp&lt;br /&gt;
java -Dlog4j.configurationClass=config class yourApp&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== set the appender named testAppender to be a console appender ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.testAppender=org.apache.log4j.ConsoleAppender&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== set the layout for the appender testAppender ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.appender.testAppender.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.testAppender.layout.conversionPattern=%m%n&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== set the level of the root logger to DEBUG and set its appender as an appender named testAppender ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.rootLogger = DEBUG, testAppender&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== smtp.properties for EMail based logging ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
#configuring the custom logger&lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, SMTP&lt;br /&gt;
#configuring the SMTP appender&lt;br /&gt;
log4j.appender.SMTP=org.apache.log4j.net.SMTPAppender&lt;br /&gt;
log4j.appender.SMTP.SMTPHost=smtp.mail.yahoo.ru&lt;br /&gt;
log4j.appender.SMTP.to=clientname@mailserver.ru&lt;br /&gt;
log4j.appender.SMTP.subject=Testing the appender&lt;br /&gt;
log4j.appender.SMTP.from=yourname@mailserver.ru&lt;br /&gt;
log4j.appender.SMTP.layout=org.apache.log4j.SimpleLayout&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== xml.properties: configuring the custom logger ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
log4j.logger.ru.apress.logging.log4j=DEBUG, FILE&lt;br /&gt;
log4j.appender.FILE=org.apache.log4j.FileAppender&lt;br /&gt;
log4j.appender.FILE.File=xmlLayout.xml&lt;br /&gt;
log4j.appender.FILE.layout=org.apache.log4j.xml.XMLLayout&lt;br /&gt;
log4j.appender.FILE.layout.LocationInfo=true&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>