Java日志记录 - 如何将输出重定向到记录器的自定义日志文件? [英] Java Logging - how to redirect output to a custom log file for a logger?

查看:344
本文介绍了Java日志记录 - 如何将输出重定向到记录器的自定义日志文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对jdk日志记录配置有疑问。我有一个EJB(部署到glassfish),它使用JDK Logging来输出消息。
因此我使用带有如下代码的命名记录器:

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...");
....

我知道我可以通过添加为记录器配置loglevel以下一行来自Glassfish的logging.properties文件:

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

但是如何为记录器指定输出文件?我想把名为'org.imixs.workflow'的记录器中的所有消息放入一个单独的文件中。这可能吗?

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?

感谢您的帮助

推荐答案

FileHandler的混淆模式属性可以用于此

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:

/本地路径名分隔符

%t系统临时目录

%huser.home系统属性的值

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

%g用于区分轮换日志的世代号

"%g" the generation number to distinguish rotated logs

%u是解决冲突的唯一号码

"%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

你可以看到诀窍是有一个自定义类的logging.FileHandler2,除了扩展了FileHandler

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();
    }

}

背景
遗憾的是,Java的创建者并不期望任何人登录多个文件。如果查看java.util.logging.FileHandler的源代码,您会发现,类属性加载了pattern属性:

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");

这篇关于Java日志记录 - 如何将输出重定向到记录器的自定义日志文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆