19

I'm working on a project that uses Log4J via Commons.

I'm trying to find the path to the log file, but I'm not finding an appropriate method that will return the logfile path from the Logger.

Anyone ever attempted this?

wadesworld
  • 13,535
  • 14
  • 60
  • 93

2 Answers2

32

You have to get all appenders from the root logger and then get the name of the log file.

    Enumeration e = Logger.getRootLogger().getAllAppenders();
    while ( e.hasMoreElements() ){
      Appender app = (Appender)e.nextElement();
      if ( app instanceof FileAppender ){
        System.out.println("File: " + ((FileAppender)app).getFile());
      }
    }
dogbane
  • 266,786
  • 75
  • 396
  • 414
1

Maybe you could try to get the Appenders ?

Enumeration appenders = logger.getRootLogger().getAllAppenders(); 

If you have a FileAppender, you can get the File ...

Something like that :

FileAppender fileAppender = null;
Enumeration appenders = logger.getRootLogger().getAllAppenders(); 
while(appenders.hasMoreElements()) {

    Appender currAppender = (Appender) appenders.nextElement();
    if(currAppender instanceof FileAppender) {
        fileAppender = (FileAppender) currAppender;
    }
}

if(fileAppender != null) {
    logDest = fileAppender.getFile();
    System.out.println("logDest : " + logDest);
}

Hope this helps !

LaGrandMere
  • 10,265
  • 1
  • 33
  • 41
  • 2
    You must use the root logger to get the appenders. `Logger.getRootLogger().getAllAppenders();` – dogbane Dec 09 '10 at 17:45
  • @dogbane Ah ? Well, I haven't Eclipse opened right now :) If you don't get the RootLogger, you get an empty Enumeration ? – LaGrandMere Dec 09 '10 at 17:52
  • 1
    You need to use the Logger.getRootLogger().getAllAppenders() to get at the appenders for some reason.. logger.getAllAppenders() does not work unless logger is the root logger. Down voting since the answer was not clear enough. – sethu Sep 09 '13 at 15:02
  • @sethu I've updated my answer to make it clearer, thanks for your comment. – LaGrandMere Sep 10 '13 at 09:58