javalog4jerror-log

How to write error log or exception into file in java


Is there any way to write error log or exception into a file in java. i have gone through Log4j. I googled about it but diidnt find a good solution. I have written a simple code

catch (Exception e) {
    PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));     
    e.printStackTrace(pw);
} 

Is there any other way to log the errors or exception? can any body provide me wwith sample example of Log4j?


Solution

  • First read log4j Manual, it's easy to configure a rolling log file. You do not have to do any explicit file operations.

    #SET LEVEL of ROOT-LOGGER, you will like to have Debug in local, but in prod you may just want WARN and ABOVE. This setting is done here!
    log4j.rootLogger=debug, stdout, R
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    
    # Pattern to output the caller's file name and line number. (basically, format of log)
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
    
    # THIS IS WHERE YOU WILL HAVE ALL THE LOG WRITTEN
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=/var/log/applogs/example.log
    
    # Maximum size of log file, usually we keep 10MB
    log4j.appender.R.MaxFileSize=100KB
    # Keep one backup file, usually we keep 10
    log4j.appender.R.MaxBackupIndex=1
    
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
    

    Second, whenever you catch an exception, do like this

    public class MyClass{
    
      private static Logger logger = Logger.getLogger(MyClass.class);
    
      public ReturnType myMethod(Param p, Param2 p2) {
        ....
        ....
        try {
          ..    
        } catch(MyException e) {
           logger.error("Exceptions happen!", e); //this will put all the details in log file configured earlier
           logger.warn("Warning !", e); // there are different levels at which one can log things
        }
        ....
      }
    
      ....
    }
    

    It worth reading the manual. Even better read Complete log4j Manual