Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Logging - how to redirect output to a custom log file for a logger?

Tags:

I have a question about the jdk logging configuration. I have a EJB (deployed into glassfish) which uses JDK Logging to output messages. Therefor I use a named logger with a code like this:

private static Logger logger = Logger.getLogger("org.imixs.workflow"); .....        logger.fine(" some info..."); .... 

I know that I can configure the loglevel for my logger by adding the following line into the logging.properties File from Glassfish:

..... org.imixs.workflow.level=FINE 

But how can I specify the output file for my logger? I would like to put all messages from the logger named 'org.imixs.workflow' into a separate file. Is this possible?

Thanks for any help

like image 608
Ralph Avatar asked Nov 23 '11 20:11

Ralph


People also ask

How do I log a logger?

Logger log() Method in Java with Examples. The log() method of Logger is used to Log a message. If the logger is currently enabled for the given message level which is passed as parameter then a corresponding LogRecord is created and forwarded to all the registered Output Handler objects.

Where does logger info write to Java?

After passing this initial (cheap) test, the Logger will allocate a LogRecord to describe the logging message. It will then call a Filter (if present) to do a more detailed check on whether the record should be published. If that passes it will then publish the LogRecord to its output Handlers. `


2 Answers

the slightly confusing pattern property of FileHandler can be used for this

handlers=java.util.logging.FileHandler # Default global logging level.  .level=INFO  #logging level for the foo.bar package foo.bar.level=CONFIG  java.util.logging.FileHandler.pattern=%h/java%u.log 

A pattern consists of a string that includes the following special components that will be replaced at runtime:

"/" the local pathname separator

"%t" the system temporary directory

"%h" the value of the "user.home" system property

"%g" the generation number to distinguish rotated logs

"%u" a unique number to resolve conflicts

"%%" translates to a single percent sign "%"

If you want to log to multiple files then you can do it by set up multiple handlers for multiple named loggers

#FileHandler for file1     java.util.logging.FileHandler.pattern = logging_property_test.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter  #FileHandler for file2 logging.FileHandler2.pattern = logging_property_test2.log logging.FileHandler2.limit = 50000 FileHandler.count = 1 logging.FileHandler2.formatter = java.util.logging.SimpleFormatter   #setting handler for logger1 logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler  #setting handler for logger2 logging.PropertyTestingLogger2.handlers=logging.FileHandler2 

as you can see the trick is that there is a logging.FileHandler2 that is a custom class and does nothing but extends the FileHandler

package logging;  import java.io.IOException; import java.util.logging.FileHandler;  public class FileHandler2 extends FileHandler {      public FileHandler2() throws IOException, SecurityException {         super();     }  } 

Background : unfortunately the creators of Java were not expecting anyone to log into multiple files. If you look at the source of java.util.logging.FileHandler you will find, that the pattern property is loaded by the class name :

public class FileHandler extends StreamHandler {     private String pattern;     private void configure() {          String cname = getClass().getName();         pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
like image 137
Peter Szanto Avatar answered Sep 29 '22 12:09

Peter Szanto


You should use a FileHandler.

FileHandler fileHandler = new FileHandler("myLogFile"); logger.addHandler(fileHandler); 

See Example Depot for some clear examples configuring loggers.

And you might find these answers useful, for setting from properties file.

like image 36
yair Avatar answered Sep 29 '22 11:09

yair