摆脱derby.log

All*_*sen 27 java maven-2 derby

我正在使用Apache Derby嵌入式数据库在Maven项目中进行单元测试.不幸的是,每当我运行测试时,我最终都会derby.log在项目的根目录中找到该文件.数据库本身是在target目录(jdbc:derby:target/unittest-db;create=true)中创建的,因此这不是问题.在查阅参考指南之后, 我尝试logDevice在JDBC url(jdbc:derby:target/unittest-db;create=true;logDevice=/mylogs)上设置参数,但这似乎是针对不同的日志,因此derby.log仍然会出现.

任何帮助深表感谢.

小智 47

Derby允许您使用Java系统属性指定要将错误日志消息写入的文件的名称derby.stream.error.file.默认值为'derby.log'.

derby.log在Maven surefire测试阶段摆脱,我只需在插件配置中添加属性定义,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemProperties>
            <property>
                <name>derby.stream.error.file</name>
                <value>target/derby.log</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • 您应该考虑使用$ {project.build.directory}变量,而不是对目标文件夹进行硬编码。&lt;value&gt; $ {project.build.directory} /derby.log &lt;/ value&gt; (2认同)

ste*_*own 21

您可以derby.log通过创建以下类来删除文件

public class DerbyUtil {
    public static final OutputStream DEV_NULL = new OutputStream() {
        public void write(int b) {}
    };
}
Run Code Online (Sandbox Code Playgroud)

并设置JVM系统属性derby.stream.error.field,例如,使用以下JVM命令行参数:

-Dderby.stream.error.field=DerbyUtil.DEV_NULL
Run Code Online (Sandbox Code Playgroud)

归功于它应该到期的人.


小智 8

在derby.properties文件中包含以下内容:

derby.stream.error.file=/dev/null
Run Code Online (Sandbox Code Playgroud)

( 要么

derby.stream.error.file=\\Device\\Null
Run Code Online (Sandbox Code Playgroud)

在Windows上)