我对jdk日志记录配置有疑问。我有一个EJB(部署到glassfish),它使用JDK Logging来输出消息。 因此我使用一个带有如下代码的命名记录器:
private static Logger logger = Logger.getLogger("org.imixs.workflow");
.....
logger.fine(" some info...");
....
我知道我可以通过将以下行添加到Glassfish的logging.properties文件中来为我的记录器配置loglevel:
.....
org.imixs.workflow.level=FINE
但是如何为记录器指定输出文件?我想把名为'org.imixs.workflow'的记录器中的所有消息放入一个单独的文件中。这可能吗?
感谢您的帮助
答案 0 :(得分:32)
FileHandler的轻微混淆模式属性可用于此
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
模式由一个字符串组成,该字符串包含将在运行时替换的以下特殊组件:
“/”本地路径名分隔符
“%t”系统临时目录
“%h”“user.home”系统属性的值
“%g”用于区分旋转日志的世代号
“%u”是解决冲突的唯一号码
“%%”转换为单个百分号“%”
如果要登录多个文件,可以通过为多个命名记录器设置多个处理程序来完成此操作
#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之外什么都不做
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属性:
public class FileHandler extends StreamHandler {
private String pattern;
private void configure() {
String cname = getClass().getName();
pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");
答案 1 :(得分:11)
您应该使用FileHandler。
FileHandler fileHandler = new FileHandler("myLogFile");
logger.addHandler(fileHandler);
有关配置记录器的一些明确示例,请参阅Example Depot。
您可能会发现these answers对于设置属性文件非常有用。
答案 2 :(得分:5)
使用java.util.logging,只需修改配置文件即可 不 。不幸的是,您必须扩展FileHandler并配置该处理程序以过滤您想要记录的内容。