Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
602 views
in Technique[技术] by (71.8m points)

netbeans - How to solve the exception logging problem which I have in Java?

I have used logger object and add file handler to log the exceptions in a log file of a Java project. It is working fine, when I run it from NetBeans IDE, but when I run it as a standalone application from console, the exceptions are logged in console and the file is not even created in the location I have specified.

private static final Logger LOGGER = Logger.getLogger(BuyerRegistration.class.getName());

    public static void main(String args[]) {
        
        Formatter simpleFormatter = null;
        Handler fileHandler = null;
        try {
            LOGGER.setUseParentHandlers(false);
            fileHandler = new FileHandler("dist/lib/CurryHouse.log", true);
            simpleFormatter = new SimpleFormatter();
            LOGGER.addHandler(fileHandler);
            fileHandler.setFormatter(simpleFormatter);
            fileHandler.setLevel(Level.ALL);
            LOGGER.setLevel(Level.ALL);
        } catch (IOException exception) {
            LOGGER.log(Level.SEVERE, "Error occur in FileHandler.", exception);
        }

The above code will come inside a BuyerRegistration class. Also, I have attached the following code in all catch blocks to log the exception in the file.

LOGGER.log(Level.SEVERE, "{0}
", "Bills:352" + e.toString());

I want to the code to log all the exceptions in the location I specify rather than logging in the console

question from:https://stackoverflow.com/questions/65834345/how-to-solve-the-exception-logging-problem-which-i-have-in-java

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I run it as a standalone application from console, the exceptions are logged in console and the file is not even created in the location I have specified.

You are using a relative path which is altered when the current directory is changed. Use a absolute path, a FileHandler pattern, or set the current directory in your launcher.

I want to the code to log all the exceptions in the location I specify rather than logging in the console

Add your handler to the root logger instead of your named logger. You can do this by supplying a logging.properties or a config class.

private static final Logger ROOT = Logger.getLogger("");
static {
    Formatter simpleFormatter = null;
    Handler fileHandler = null;
    try {
        //TODO: Fix file path
        fileHandler = new FileHandler("%h/CurryHouse.log", true);
        simpleFormatter = new SimpleFormatter();
        LOGGER.addHandler(fileHandler);
        fileHandler.setFormatter(simpleFormatter);
        fileHandler.setLevel(Level.ALL);
        ROOT.addHandler(fileHandler);
    } catch (IOException exception) {
        LOGGER.log(Level.SEVERE, "Error occur in FileHandler.", exception);
    }
}

public static void main(String args[]) {
   //Your app.
}

Also, I have attached the following code in all catch blocks to log the exception in the file.

You might want to consider logging the full stacktrace:

LOGGER.log(Level.SEVERE, "Bills:352", e);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...