java util logging.properties: How to log to two different files

前端 未结 5 2187
逝去的感伤
逝去的感伤 2020-12-11 19:15

I am placing a logging.properties in the WEB-INF/classes dir of tomcat

I would like to log to two different files. For example: org.pkg1 goes to one file and org.pkg

相关标签:
5条回答
  • 2020-12-11 19:28

    Having the same problem myself with java.util.logging and not quite satisfied with the given answers, I just found in the documentation:

    2.2 Changing the Configuration

    Here's a small program that dynamically adjusts the logging configuration to send output to a specific file and to get lots of information on wombats. The pattern "%t" means the system temporary directory.

    public static void main(String[] args) {
            Handler fh = new FileHandler("%t/wombat.log");
            Logger.getLogger("").addHandler(fh);
            Logger.getLogger("com.wombat").setLevel(Level.FINEST);
            ...
        }
    

    So, it seems you can't do it just from the .properties file as can't instantiate several appenders, but you can do it programmatically. Also it should be possible using the LoggerManager

    0 讨论(0)
  • 2020-12-11 19:30

    It is possible using pure jdk also (try with jdk 7 or jdk 8).

    Just create custom file handler; use that similar to "java.util.logging.FileHandler".

    public class JULTestingFileHandler extends FileHandler {
    
        public JULTestingFileHandler() throws IOException, SecurityException 
        {
            super();    
        }
    }
    

    user properties file;

    com.xxx.handlers = com.xxx.JULXXXFileHandler
    
    com.xxx.JULXXXFileHandler.pattern   = ./logs/test1_test2.%u.%g.log
    
    0 讨论(0)
  • 2020-12-11 19:33

    I finally figured this out. In tomcat they extend java util logging ("JULI") to enable this functionality. Here's a logging.properties file that I put in the WEB-INF directory that finally accomplished what I was after......:

    handlers=1console.java.util.logging.ConsoleHandler, 2jsp.org.apache.juli.FileHandler, 3financials.org.apache.juli.FileHandler
    .handlers=1a.java.util.logging.ConsoleHandler
    
    jsp.level=ALL
    jsp.handlers=2jsp.org.apache.juli.FileHandler
    org.apache.jasper.level = FINE
    org.apache.jasper.handlers=2jsp.org.apache.juli.FileHandler
    org.apache.jsp.level = FINE
    org.apache.jsp.handlers=2jsp.org.apache.juli.FileHandler
    
    com.paypal.level=ALL
    com.paypal.handlers=3financials.org.apache.juli.FileHandler
    
    3financials.org.apache.juli.FileHandler.level=ALL
    3financials.org.apache.juli.FileHandler.directory=${catalina.base}/logs
    3financials.org.apache.juli.FileHandler.prefix=financials.
    
    2jsp.org.apache.juli.FileHandler.level=ALL
    2jsp.org.apache.juli.FileHandler.directory=${catalina.base}/logs
    2jsp.org.apache.juli.FileHandler.prefix=jsp.
    
    1console.java.util.logging.ConsoleHandler.level=FINE
    1console.java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    
    0 讨论(0)
  • 2020-12-11 19:43

    Speaking of logging.properties configuration, I did not found any mechanism to use more that one appender. I made simple workaround that works for me.

    public class CustomAFileHandler extends FileHandler {
       public DebugFileHandler() throws IOException, SecurityException {
          super();
       }
    }
    
    public class CustomBFileHandler extends FileHandler {
       public DebugFileHandler() throws IOException, SecurityException {
          super();
       }
    }
    

    And my logging.properties

    ...
    handlers=<pkg_name>.CustomAFileHandler, <pkg_name>.CustomBFileHandler, java.util.logging.ConsoleHandler
    
    <pkg_name>.CustomAFileHandler.level=ALL
    <pkg_name>.CustomAFileHandler.pattern=%h/A%u.log
    <pkg_name>.CustomAFileHandler.limit=50000
    <pkg_name>.CustomAFileHandler.count=1 
    <pkg_name>.CustomAFileHandler.formatter=java.util.logging.SimpleFormatter
    
    
    <pkg_name>.CustomBFileHandler.level=ALL
    <pkg_name>.CustomBFileHandler.pattern=%h/B%u.log
    <pkg_name>.CustomBFileHandler.limit=50000
    <pkg_name>.CustomBFileHandler.count=1 
    <pkg_name>.CustomBFileHandler.formatter=java.util.logging.SimpleFormatter
    ...
    
    0 讨论(0)
  • 2020-12-11 19:43

    There's no easy way to get two handlers of the same type with java.util.logging classes that have different arguments. Probably the simplest way to do this is to create a FileHandler subclass in your logging.properties that passes the appropriate arguments to enable your logging to take place, such as:

    org.pkg1.handlers=java.util.logging.FileHandler
    org.pkg2.handlers=org.pkg2.FileHandler
    java.util.logging.FileHandler.pattern="org_pkg1_%u.%g.log"
    org.pkg2.FileHandler.pattern="org_pkg2_%u.%g.log"
    

    org/pkg2/FileHandler.java:

    package org.pkg2;
    
    import java.util.logging.*;
    
    public class FileHandler extends java.util.logging.FileHandler {
        public FileHandler() {
            super(LogManager.getLogManager().getProperty("org.pkg2.FileHandler.pattern"));
        }
    }
    
    0 讨论(0)
提交回复
热议问题