Log4j禁用#timestamp注释

时间:2017-01-18 12:09:18

标签: java properties properties-file

我有这样的log4j.properties文件:

#Wed Jan 18 12:55:30 EET 2017
log4j.rootLogger=ERROR, stdout, gui, clientFile
log4j.logger.app=DEBUG
...

当我启动应用程序时,带有时间戳(#Wed Jan 18 12:55:30 EET 2017)的第一行总是在变化。它会导致Git提交出现一些问题(我无法将此文件添加到.gitignore)。

找到添加时间戳的内容:此方法在app linkedProperties.store(fileOutputStream, null);中调用store()方法的实现来自java.util.Properties。

    package java.util;
    ...
    public class Properties extends Hashtable<Object,Object> {
    ...

    public void store(OutputStream out, String comments)
        throws IOException
    {
        store0(new BufferedWriter(new OutputStreamWriter(out, "8859_1")),
               comments,
               true);
    }

    private void store0(BufferedWriter bw, String comments, boolean escUnicode)
            throws IOException
        {
            if (comments != null) {
                writeComments(bw, comments);
             }
            bw.write("#" + new Date().toString());
            bw.newLine();
            synchronized (this) {
                for (Enumeration<?> e = keys(); e.hasMoreElements();) {
                    String key = (String)e.nextElement();
                    String val = (String)get(key);
                    key = saveConvert(key, true, escUnicode);
                    /* No need to escape embedded and trailing spaces for value, hence
                     * pass false to flag.
                     */
                    val = saveConvert(val, false, escUnicode);
                    bw.write(key + "=" + val);
                    bw.newLine();
                }
            }
            bw.flush();
        }
    ...

如何避免这种bw.write("#" + new Date().toString());?是否有类似于java.util.Properties的东西?

2 个答案:

答案 0 :(得分:1)

编辑:根据我的建议,根据我的建议找到正在为文件添加时间戳的内容,这个答案现在已经多余了。但是我会把它放在这里,因为它可能对某人有所帮助。

首先,指示Git忽略文件中的各个行是不可能的。

我的第一个建议是找到为文件添加时间戳的内容并将其停止。

唯一想到的可以帮助你在Git中特别是从Gits工作树中删除文件。

git update-index --skip-worktree <file>

这将指示Git不应提交此文件的更改版本,因此不会将其包含在其工作树中,但仍会将跟踪的副本保留在存储库中。 Look here for official docs

很明显,如果您要求开发人员定期更新/提交此文件,这将无法工作。

答案 1 :(得分:0)

我刚刚覆盖了public void store(OutputStream out,String comments)(已移除bw.write("#" + new Date().toString()))。有关此问题的详细信息,您可以使用此链接(它完全标榜我的问题):Properties.store() - suppress timestamp comment