我log4j v1.2.14用于登录我的项目,我也使用Java 7 String.format()将变量放在我的输出中.目前我正在写作
LOGGER.info(String.format("Your var is [%s] and you are [%s]", myVar, myVar1));
Run Code Online (Sandbox Code Playgroud)
这真的是输出字符串的最佳方式吗?我觉得log4j应该隐式实现如下:
LOGGER.info("Your var is [%s] and you are [%s]", myVar, myVar1);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?此外,是否有支持这种情况的Java日志框架?
我正在生成一个CSV文件以及CTL文件以供使用sqlldr.CTL文件需要知道我要加载的列的名称,我的CSV文件需要知道这些字段的默认值.
/*
* Models a line in the CSV file
*/
public class CSVRecord {
...
}
/*
* Models the CTL file
*/
public class ControlFile {
...
}
Run Code Online (Sandbox Code Playgroud)
这两个类初始化并在内部使用CSVExportFile,我有两种方法:
public enum Columns {
ID("1"),
NAME("Bob"),
...
}
Run Code Online (Sandbox Code Playgroud)
public class CSVExportFile {
private HashMap<String, String> columns;
public CSVExportFile() {
columns = new HashMap<String, String>();
columns.put("ID", "1");
columns.put("Name", "Bob");
...
}
}
Run Code Online (Sandbox Code Playgroud)
在HashMap降低了列的范围,将意味着他们只能内部使用CSVExportFile.我不打算扩展这个功能(所有的课程都是final),所以我不确定我能enum获得什么.
对于每种方法有什么争论,这是一个特殊情况,其中一个是优越的,还是一种优越的方式?
使用 Java Files API时,我在我的 (Linux) Jenkins 服务器上遇到了问题。
使用 JUnit 的集成测试失败TemporaryFolder。测试执行以下代码:
Path expectedPath = tmpFolder.getRoot().toPath().resolve("folder1/folder2");
// create files
assertTrue(Files.exists(expectedPath.resolve("newFile1.txt")));
Run Code Online (Sandbox Code Playgroud)
测试在本地通过,我在日志中看到expectedPath正在成功创建的 Jenkins 运行的日志,但让我感到困惑的是我的新文件的“路径”:
/tmp/junit0219318729037123/folder1\/folder2/newFile1.txt
Run Code Online (Sandbox Code Playgroud)
为什么\/被引进?这是 Linux 上文件的一些怪癖,还是我的tmpFolder?
我有一个.ftl资源文件,用于通过 RESTful 端点显示它,我还想通过电子邮件将此表示发送给用户。Dropwizard 对视图做了一些魔术,允许将填充的模板主体返回到我的 REST 端点(我假设为 aString或类似 a 的更高级的东西StringBuilder)。
有没有办法在View不使用其余客户端的情况下请求 a 的主体?我也不想让我的电子邮件表示依赖于HTMLREST 客户端中使用的内容,所以没有建议只将电子邮件路由到wget点击端点的内容。
从dropwizard source来看,似乎我需要ViewRenderer从某个地方获取 a ,可能是通过使用ServiceLoader.load()- 因为这是ViewBundle获取副本的方式(如果您不提供任何副本)。
java ×3
dropwizard ×1
enums ×1
file-io ×1
freemarker ×1
jenkins ×1
junit ×1
log4j ×1
logging ×1