2011-11-29 56 views
1

我的目标是使用的java.util.logging(JDK1.6)如何让根和命名记录器的文件处理程序日志记录到同一个文件?

  • 写入所有日志到相同的日志文件,并
  • 不要登录旋转
  • 可以使用%U在文件模式,以避免与其他程序

我已经配置了一个根记录器和几个指定logger,其中 根记录的处理程序设置为java.util.logging.FileHandler与设置潜在的文件冲突

java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 
java.util.logging.FileHandler.pattern = xxx.%u.log 
java.util.logging.FileHandler.limit = 200000 
java.util.logging.FileHandler.count = 20 
java.util.logging.FileHandler.append = true 

,并命名为记录器处理程序设置为customFileH 与自定义设置

customFileH.class = java.util.logging.FileHandler 
customFileH.level = ALL 
customFileH.formatter = xxxFormat 

当我运行该程序,根记录器将写日志到xxx.0.log,

同时指定logger将日志写入xxx.0.log.1,作为不同的日志文件。

即使我拿出文件模式中的“%u”备注文件旋转配置, 他们写入不同的日志文件。 :(

感谢提前任何评论。:)

回答

1

看起来你尝试应用的log4j风格配置的java.util.logging。如果要使用不同的格式化程序创建多个FileHandler,则必须使用config选项来安装每个FileHandler。创建一个配置类:

package so; 
import java.io.IOException; 
import java.util.logging.FileHandler; 
import java.util.logging.Logger; 
import java.util.logging.SimpleFormatter; 
import java.util.logging.XMLFormatter; 

public final class LoggingConfig { 

    /** 
    * Pin the loggers. 
    */ 
    private static final Logger root = Logger.getLogger(""); 
    private static final Logger named = Logger.getLogger("some.name"); 

    /** 
    * Configure the loggers. 
    * @throws Exception if there is a problem. 
    */ 
    public LoggingConfig() throws Exception { 
     root.addHandler(newRootHandler()); 
     named.addHandler(newNamedHandler()); 
    } 

    private FileHandler newRootHandler() throws IOException { 
     FileHandler f = new FileHandler("simple%g.%u.log", 200000, 20, true); 
     f.setFormatter(new SimpleFormatter()); 
     return f; 
    } 

    private FileHandler newNamedHandler() throws IOException { 
     FileHandler f = new FileHandler("xml%g.%u.log", 200000, 20, true); 
     f.setFormatter(new XMLFormatter()); 
     return f; 
    } 
} 

然后添加以下到您的logging.properties:

否则,你也可以继承的FileHandler只是为了创建一个可以在你的日志中使用的新的类名。属性。

您必须使用%g选项来区分轮转日志和%u以处理冲突。从文件处理器文档:

因此,如果三个进程都试图将日志记录到fred%u%g.txt那么他们可能会最终使用fred0.0.txt,fred1.0.txt,fred2.0。 .txt作为其旋转序列中的第一个文件。

默认情况下,所有指定的记录器都将写入根记录器的处理程序。所以根据你在做什么,你可能不需要附加文件处理程序到指定的记录器。

相关问题