views:

2114

answers:

3

Netbeans thoughtfully sprinkles Logger.getLogger(this.getClass().getName()).log(Level. [...] statements into catch blocks. Now I would like to point them all to a file (and to console).

Every logging tutorial and such only me tells how to get a specific logger to output into a file, but I assume there is a better way than fixing every automatically generated logging statement? Setting a handler for some sort of root logger or something?

+1  A: 

Check this page for settings for the root logger, which is a parent of all loggers: http://www.exampledepot.com/egs/java.util.logging/Props.html. You should be able to define settings (file appender and log file) for the root logger which are inherited by all loggers.

Miguel Ping
I hate to nitpick a perfectly good answer, but is there no API for doing this?
Bloodboiler
Check out Miles D's answer - I think in fact his code is retrieving the root logger. You just need to add your handler to that logger.
Miguel Ping
A: 

You have to define where the log is writting in the logger configuration file. For example, if you use log4j, a log4j.xml (or log4j.properties) file will contain such information.

For example, here is a simple log4j.xml file that logs directly into a file (my-app.log) and in the console:

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;

    <appender name="rolling" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="File" value="my-app.log" />
     <param name="DatePattern" value=".yyyy-MM-dd" />
     <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
       value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%C] [IP=%X{ipAddress}] [user=%X{user}] %m%n" />
     </layout>
    </appender>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
     <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
       value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%C] [user=%X{user}] %m%n" />
     </layout>
    </appender>

    <root>
     <priority value="info" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling" />
    </root>

</log4j:configuration>
romaintaz
I think from the tags the questioner is using the classes in java.util.logging rather than log4j
Simon Nickerson
He's not using log4j: netbeans generates code for java.util.logging
Maurice Perry
+1  A: 

I just add the following at startup

Handler handler = new FileHandler("test.log", LOG_SIZE, LOG_ROTATION_COUNT);
Logger.getLogger("").addHandler(handler);

You can specify your own values for LOG_SIZE and LOG_ROTATION_COUNT

You may need adjust the logging level to suit.

Miles D
Thank you all. This looks like the thing I was after.
Bloodboiler
Doing this just gives me a "Void cannot be dereferenced"
Dan