我使用java.util.logging.logger作为我的应用程序的日志记录引擎。我想将一个系统属性设置为handler.properties文件中提到的处理程序模式的值的一部分,如下所示,
int main(void){
struct region * ptr = mmap(NULL, MAX_LEN*sizeof(struct region), PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED,-1,0);
pid_t pid = fork();
if (pid == 0){
usleep(1500000);
ptr[33].len = 42;
}else if (pid > 0){
usleep(1000000);
printf("Value before: %d\n", ptr[33].len);
usleep(1000000);
printf("Value after: %d\n", ptr[33].len);
}else{
printf("Error: fork\n");
}
return 0;
}
我尝试设置上面的值,但它没有解析custom.home属性而是将其用作字符串并在初始化处理程序时给出以下错误
java.util.logging.FileHandler.pattern = path/${custom.home}/logs/server.log
有没有办法达到这个要求?
由于 达内什
答案 0 :(得分:1)
路径路径/ $ {custom.home} /logs/server.log不存在! 使用:
`java.util.logging.FileHandler.pattern = "path/"+`System.getProperty("user.home")+"/logs/server.log";
代替。 但是eclipse说:" FileHander.pattern不可见!"
答案 1 :(得分:1)
根据您的问题,我假设您已手动设置名为custom_home
的系统属性作为启动参数。然后,您可以继承java.util.logging.FileHandler以识别新的模式语法:
public class EnvFileHandler extends FileHandler {
private static String pattern() throws IOException {
String prefix = EnvFileHandler.class.getName();
String v = LogManager.getLogManager().getProperty(prefix +".pattern");
return v.replace("${custom_home}", System.getProperty("custom_home", "%hjava.log"));
}
public EnvFileHandler() throws IOException {
super(pattern());
}
}
然后使用logging.properties安装FileHandler子类,而不是安装FileHandler。
.handlers=package.of.EnvFileHandler
package.of.EnvFileHandler.pattern=path/${custom_home}/logs/server.log
如果您尚未设置此自定义属性,则此代码示例将默认为主目录。