Java Log4j创建动态文件

Java Log4j创建动态文件,java,log4j,Java,Log4j,我有一个文件处理JAVA代码,在处理文件时,我想记录所有的文件处理细节,比如文件有这几行,它在一个单独的日志文件中有一些“Hello”字符串,用于处理每个文件 我在这里尝试的代码工作正常,但是如果我有两个文件,比如file1.txt和file2.txt,记录器会在log_file1.log中记录file1.txt的详细信息,然后在log_file2.log中记录file2.txt时,它也会在log_file2.log中保留log_file1.log的内容 File1.txt Hello How

我有一个文件处理JAVA代码,在处理文件时,我想记录所有的文件处理细节,比如文件有这几行,它在一个单独的日志文件中有一些“Hello”字符串,用于处理每个文件

我在这里尝试的代码工作正常,但是如果我有两个文件,比如file1.txt和file2.txt,记录器会在log_file1.log中记录file1.txt的详细信息,然后在log_file2.log中记录file2.txt时,它也会在log_file2.log中保留log_file1.log的内容

File1.txt

Hello How are you
Hello How are you
Hello How are you
Hello How are you
Hello How are you
日志文件1.log

it has 2 lines and 2 Hello Strings
it has 2 lines and 2 Hello Strings
it has 3 lines and 3 Hello Strings
File2.txt

Hello How are you
Hello How are you
Hello How are you
Hello How are you
Hello How are you
日志文件2.log

it has 2 lines and 2 Hello Strings
it has 2 lines and 2 Hello Strings
it has 3 lines and 3 Hello Strings
我尝试过的代码:

public class DummyLog
{
    private static PatternLayout patternLayout = new PatternLayout("%d{ISO8601}\t%p\t%c\t%m%n");

    public static Logger getLogger(String fileName, Class clazz) throws Exception
        {
            fileName = "D:/New folder/log-properties/" + fileName + ".log";
            Logger logger = Logger.getLogger(clazz);
            FileAppender appender = new DailyRollingFileAppender(patternLayout,
                            fileName, "'.'yyyy-MM-dd");
            logger.addAppender(appender);
            logger.setLevel(Level.DEBUG);
            return logger;
        }
}
public class TestDummyLog
{
    public static void main(String args[]) throws Exception
    {
        for(int i = 2;i > 0;i--)
        {           
                 String loggerName = "Log1_"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date());
                 Logger logger = DummyLog.getLogger(loggerName, TestDummyLog.class);
                 logger.info("Joseph Micheal TestLogger:" +new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
                 new TestLoggerChild().getChileStuff(loggerName);
                 Thread.sleep(6000);
        }

    }
}
public class TestLoggerChild
{
public static Logger logger = null;
public void getChileStuff(String fileName) throws Exception
{
    logger = DummyLog.getLogger(fileName,TestLoggerChild.class);
    logger.info("Child Sample info message"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
    logger.info("Class :::::: TestLoggerChild.class");
    logger.debug("fileName @@@@@@@@@@@@@:" + fileName);
    logger.info("Sample info message");
    logger.warn("Sample warn message");
    logger.error("Sample error message");
    logger.info("Sample info message ");
    logger.info("Class :::::: TestLoggerChild.class");
}
}
主类:

public class DummyLog
{
    private static PatternLayout patternLayout = new PatternLayout("%d{ISO8601}\t%p\t%c\t%m%n");

    public static Logger getLogger(String fileName, Class clazz) throws Exception
        {
            fileName = "D:/New folder/log-properties/" + fileName + ".log";
            Logger logger = Logger.getLogger(clazz);
            FileAppender appender = new DailyRollingFileAppender(patternLayout,
                            fileName, "'.'yyyy-MM-dd");
            logger.addAppender(appender);
            logger.setLevel(Level.DEBUG);
            return logger;
        }
}
public class TestDummyLog
{
    public static void main(String args[]) throws Exception
    {
        for(int i = 2;i > 0;i--)
        {           
                 String loggerName = "Log1_"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date());
                 Logger logger = DummyLog.getLogger(loggerName, TestDummyLog.class);
                 logger.info("Joseph Micheal TestLogger:" +new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
                 new TestLoggerChild().getChileStuff(loggerName);
                 Thread.sleep(6000);
        }

    }
}
public class TestLoggerChild
{
public static Logger logger = null;
public void getChileStuff(String fileName) throws Exception
{
    logger = DummyLog.getLogger(fileName,TestLoggerChild.class);
    logger.info("Child Sample info message"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
    logger.info("Class :::::: TestLoggerChild.class");
    logger.debug("fileName @@@@@@@@@@@@@:" + fileName);
    logger.info("Sample info message");
    logger.warn("Sample warn message");
    logger.error("Sample error message");
    logger.info("Sample info message ");
    logger.info("Class :::::: TestLoggerChild.class");
}
}
子类:

public class DummyLog
{
    private static PatternLayout patternLayout = new PatternLayout("%d{ISO8601}\t%p\t%c\t%m%n");

    public static Logger getLogger(String fileName, Class clazz) throws Exception
        {
            fileName = "D:/New folder/log-properties/" + fileName + ".log";
            Logger logger = Logger.getLogger(clazz);
            FileAppender appender = new DailyRollingFileAppender(patternLayout,
                            fileName, "'.'yyyy-MM-dd");
            logger.addAppender(appender);
            logger.setLevel(Level.DEBUG);
            return logger;
        }
}
public class TestDummyLog
{
    public static void main(String args[]) throws Exception
    {
        for(int i = 2;i > 0;i--)
        {           
                 String loggerName = "Log1_"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date());
                 Logger logger = DummyLog.getLogger(loggerName, TestDummyLog.class);
                 logger.info("Joseph Micheal TestLogger:" +new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
                 new TestLoggerChild().getChileStuff(loggerName);
                 Thread.sleep(6000);
        }

    }
}
public class TestLoggerChild
{
public static Logger logger = null;
public void getChileStuff(String fileName) throws Exception
{
    logger = DummyLog.getLogger(fileName,TestLoggerChild.class);
    logger.info("Child Sample info message"+new SimpleDateFormat("yyyyddMMHHmmssSSS").format(new Date()));
    logger.info("Class :::::: TestLoggerChild.class");
    logger.debug("fileName @@@@@@@@@@@@@:" + fileName);
    logger.info("Sample info message");
    logger.warn("Sample warn message");
    logger.error("Sample error message");
    logger.info("Sample info message ");
    logger.info("Class :::::: TestLoggerChild.class");
}
}

是否有必要使用相同的类别(TestLoggerChild.class)?如果您传递自定义参数化字符串,它必须工作:DummyLog.getLogger(文件名,“Category”+i)

是否有必要使用相同的类别(TestLoggerChild.class)?如果您传递自定义参数化字符串,它必须工作:DummyLog.getLogger(文件名,“Category”+i)

对不起,你能重新描述一下这个问题吗?我没有得到它:-(您在滚动日志文件方面有问题吗?感谢回复,请检查更新的描述。try logger.setAdditivity(false)我尝试过这不起作用!是否有必要使用相同的类别(TestLoggerChild.class)?如果您传递自定义参数化字符串,它必须起作用。DummyLog.getLogger(文件名,“类别”)+i);-我是从TestDummyLog传递过来的对不起,你能重新表述一下问题的描述吗?我不明白:-(你在滚动日志文件方面有问题吗?谢谢回复,请检查更新的描述。try logger.setAdditivity(false)我尝试过这不起作用!是否有必要拥有相同的类别(TestLoggerChild.class)?如果您传递自定义参数化字符串,则它必须有效。DummyLog.getLogger(文件名,“Category”+i);-i是从TestDummyLog传递的