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