How to write error log or exception into file in java

后端 未结 6 492
余生分开走
余生分开走 2020-12-24 07:59

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

相关标签:
6条回答
  • 2020-12-24 08:42

    Using log4j you can log exceptiosn quite easily:

    try {
        ...
    } catch(Exception e) {
        log.error("An exception! Oops!", e);
    }
    
    0 讨论(0)
  • 2020-12-24 08:46

    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.log("Exceptions happen!", e); //this will put all the details in log file configured earlier
        }
        ....
      }
    
      ....
    }
    

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

    0 讨论(0)
  • 2020-12-24 08:47

    Look this tutorial about "File Appender"

    See official Log4j short introduction and the "Configuration" section.

    You can also make search about "RollingFileAppender" or "File appender".

    You configure your logger to send its message to an appender. This appender can forward message towards the console (stdin), towards a file (FileAppender, RollingFileAppender...)...

    Use this to perform error log:

    try{
        throw new Exception("bla bla bla...");
    } catch( Exception e ){
         // log without stack trace
         mLogger.error("Your log message");
    
         // log with stack trace
         mLogger.error("Your log message", e);
    }
    
    0 讨论(0)
  • 2020-12-24 08:50
    try {
           System.setErr(new PrintStream(new FileOutputStream(System.getProperty("user.home")+"/error.log")));
    } catch (FileNotFoundException ex) {
            ex.printStackTrace();
    }
    

    Now all error output is written into this file

    0 讨论(0)
  • 2020-12-24 08:57

    You can add the exception as a parameter to your log4j statement, e.g.

    catch(Exception e)
    {
        logger.error("Unexpected error", e);
    }
    

    Provided you've got a file appender running OK, this will output the complete stack trace of the exception.

    0 讨论(0)
  • 2020-12-24 09:01

    You can Log data using log4j dependency. Go this link

    https://logging.apache.org/log4j/2.x/manual/configuration.html
    Pom dependency ==>
    
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.2</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.2</version>
    </dependency>
    
    Properties File eg ==>
    
    status = error
    dest = err
    name = PropertiesConfig
    
    property.filename = target/rolling/rollingtest.log
    
    filter.threshold.type = ThresholdFilter
    filter.threshold.level = debug
    
    appender.console.type = Console
    appender.console.name = STDOUT
    appender.console.layout.type = PatternLayout
    appender.console.layout.pattern = %m%n
    appender.console.filter.threshold.type = ThresholdFilter
    appender.console.filter.threshold.level = error
    
    appender.rolling.type = RollingFile
    appender.rolling.name = RollingFile
    appender.rolling.fileName = ${filename}
    appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}- 
    %i.log.gz
    appender.rolling.layout.type = PatternLayout
    appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
    appender.rolling.policies.type = Policies
    appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
    appender.rolling.policies.time.interval = 2
    appender.rolling.policies.time.modulate = true
    appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    appender.rolling.policies.size.size=100MB
    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.max = 5
    
    logger.rolling.name = com.example.my.app //  Change this to your own package 
    name otherwise will not work
    logger.rolling.level = debug
    logger.rolling.additivity = false
    logger.rolling.appenderRef.rolling.ref = RollingFile
    
    rootLogger.level = info
    rootLogger.appenderRef.stdout.ref = STDOUT
    
    Java code ==>
    private static final Logger logger = 
    LogManager.getLogger(MyClass.class.getName());
    logger.info("Entering application.");
    logger.trace("Entering application.");
    logger.debug("Debugg application.");
    logger.error("Did it again!");
    
    0 讨论(0)
提交回复
热议问题