Logging to multiple appenders (OR LOG FILES)
How to add Logs in File by using Log4j
In this tutorial we will discuss how we can have multiple appenders, in other words how we can log the message into more than one appenders like file and console . In the example given below, all logs with a level INFO or higher will be logged to both the console and a file named application.log.
How to add Logs in File by using Log4j
In this tutorial we will discuss how we can have multiple appenders, in other words how we can log the message into more than one appenders like file and console . In the example given below, all logs with a level INFO or higher will be logged to both the console and a file named application.log.
log4j.properties file
log4j.rootLogger=INFO, CA, FA # Console appender configuration log4j.appender.CA=org.apache.log4j.ConsoleAppender log4j.appender.CA.layout=org.apache.log4j.PatternLayout log4j.appender.CA.layout.ConversionPattern=%r [%t] %5p (%F:%L) - %m%n # File appender configuration log4j.appender.FA=org.apache.log4j.FileAppender log4j.appender.FA.File=D:/log/application.log log4j.appender.FA.layout=org.apache.log4j.PatternLayout log4j.appender.FA.layout.ConversionPattern=%r [%t] %5p (%F:%L) - %m%n
You can also set the logger level for each appender separately.Since we didn't set any log level explicitly for both the appenders it will inherit the rootLogger level, that is INFO which we declared in the properties file.
Create Java Class to test log message
package com.jwt.log; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Log4jDemo { static final Logger logger = Logger.getLogger(Log4jDemo.class); static final String LOG_PROPERTIES_FILE = "log4j.properties"; public static void main(String[] args) { new Log4jDemo(); // sample info log message logger.info("leaving the main method of Log4JDemo"); } public Log4jDemo() { initializeLogger(); // sample info log message logger.info("Log4jDemo - leaving the constructor ..."); } private void initializeLogger() { Properties logProperties = new Properties(); try { // load log4j properties configuration file logProperties.load(new FileInputStream(LOG_PROPERTIES_FILE)); PropertyConfigurator.configure(logProperties); logger.info("Logging initialized."); } catch (IOException e) { logger.error("Unable to load logging property :", e); } try { FileInputStream fstream = new FileInputStream("D:\\textfile.txt"); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine; while ((strLine = br.readLine()) != null) { System.out.println(strLine); } in.close(); } catch (FileNotFoundException fe) { logger.error("File Not Found", fe); logger.warn("This is a warning message"); logger.trace("This message will not be logged since log level is set as DEBUG"); } catch (IOException e) { logger.error("IOEXception occured:", e); } } }
After executing the program, application.log file will be generated inside "D:/log" folder at the same time logs will be displayed on the console with the following entry.
0 [main] INFO (Log4jDemo.java:38) - Logging initialized. 8 [main] ERROR (Log4jDemo.java:52) - File Not Found java.io.FileNotFoundException: D:\textfile.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:106) at java.io.FileInputStream. (FileInputStream.java:66) at com.jwt.log.Log4jDemo.initializeLogger(Log4jDemo.java:43) at com.jwt.log.Log4jDemo. (Log4jDemo.java:26) at com.jwt.log.Log4jDemo.main(Log4jDemo.java:20) 12 [main] WARN (Log4jDemo.java:53) - This is a warning message 12 [main] INFO (Log4jDemo.java:28) - Log4jDemo - leaving the constructor ... 12 [main] INFO (Log4jDemo.java:22) - leaving the main method of Log4JDemo