Java 如何使用属性文件在log4j2中创建多个日志文件?

Java 如何使用属性文件在log4j2中创建多个日志文件?,java,log4j2,Java,Log4j2,我正在使用.property文件在特定路径中创建日志文件,但我正在使用该文件创建单个文件。以下是我的属性文件代码: status = error dest = err name = PropertiesConfig property.filepath= /ap property.filename =${filepath}/ai.log property.filename1 =${filepath}/file1.log property.filename2 =${filepath}/fi

我正在使用.property文件在特定路径中创建日志文件,但我正在使用该文件创建单个文件。以下是我的属性文件代码:

    status = error
dest = err
name = PropertiesConfig

property.filepath= /ap
property.filename =${filepath}/ai.log
property.filename1 =${filepath}/file1.log
property.filename2 =${filepath}/file2.log

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

appender.file.type = RollingFile
appender.file.name = RootFile1
appender.file.fileName = ${filename}
appender.file.filePattern = ${filepath}/%d{yyyyMMdd}/cpl.mw.%d{yyyyMMdd}.%i.log.gz
appender.file.layout.type = PatternLayout
#appender.file.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.file.policies.type = Policies
appender.file.policies.time.type = TimeBasedTriggeringPolicy
appender.file.policies.time.interval = 1
appender.file.policies.time.modulate = true
appender.file.policies.size.type = SizeBasedTriggeringPolicy
appender.file.policies.size.size=50MB
appender.file.strategy.type = DefaultRolloverStrategy
appender.file.strategy.max = 20

appender.rolling1.type = RollingFile
appender.rolling1.name = RollingFile1
appender.rolling1.fileName = ${filename1}
appender.rolling1.filePattern = ${filepath}/%d{yyyyMMdd}/cpl.mw.%d{yyyyMMdd}.%i.log.gz
appender.rolling1.layout.type = PatternLayout
#appender.rolling1.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling1.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling1.policies.type = Policies
appender.rolling1.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling1.policies.time.interval = 1
appender.rolling1.policies.time.modulate = true
appender.rolling1.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling1.policies.size.size=50MB
appender.rolling1.strategy.type = DefaultRolloverStrategy
appender.rolling1.strategy.max = 20



appender.rolling2.type = RollingFile
appender.rolling2.name = RollingFile2
appender.rolling2.fileName = ${filename2}
appender.rolling2.filePattern = ${filepath}/%d{yyyyMMdd}/cpl.mw.%d{yyyyMMdd}.%i.log.gz
appender.rolling2.layout.type = PatternLayout
appender.rolling2.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.rolling2.policies.type = Policies
appender.rolling2.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling2.policies.time.interval = 1
appender.rolling2.policies.time.modulate = true
appender.rolling2.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling2.policies.size.size=50MB
appender.rolling2.strategy.type = DefaultRolloverStrategy
appender.rolling2.strategy.max = 20

loggers
logger.name=file1
logger.level = debug
logger.additivity = true
logger.appenderRefs = rolling1,stdout
logger.appenderRefs.level = debug
logger.appenderRef.rolling1.ref = RollingFile1
logger.appenderRef.stdout.ref = STDOUT

logger.name=file2
logger.level = debug
logger.additivity = true
logger.appenderRefs = rolling2
logger.appenderRefs.level = debug
logger.appenderRef.rolling2.ref = RollingFile2
上面的代码是我的xyz.properties文件的代码。我想使用此配置文件创建多个日志。我的属性配置文件创建多个文件,但不会在日志文件中放置不同的日志。我使用以下代码从JAVA调用此代码:

private static final Logger logCommon = LogManager.getLogger("file1");
private static final Logger logAnalytics = LogManager.getLogger("file2");

public static void main(String[] args) throws Exception {

    logCommon.info ("file1 Need it save into commons.log file");
    logAnalytics.info ("file2 Only save into analytics.log file");

}
2018-01-22 12:52:23信息文件2:301-文件2仅保存到analytics.log文件中
log放入两个日志文件中

我参考以下链接:

我参考了以下链接,但没有得到任何解决方案:


使用下面的配置,并在需要使用完全限定路径时调用addLogger()

public static void addLogger(String parentPath) throws SecurityException, IOException {
        try {
            InputStream in = ConfiguratorHelper.class.getResourceAsStream("/resources/mylogging.properties"); 
            LogManager.getLogManager().readConfiguration(in);
        } catch (SecurityException | IOException e1) {
            e1.printStackTrace();
        }
        logger.setLevel(Level.FINE);
        logger.addHandler(new ConsoleHandler());
        logger.addHandler(new MyHandler());
        try {
            //FileHandler file name with max size and number of log files limit
            Handler fileHandler = new FileHandler(path, 1000000, 10);
            fileHandler.setFormatter(new MyFormatter());
            fileHandler.setFilter(new MyFilter());
            logger.addHandler(fileHandler);
            logger.log(Level.CONFIG, "Config data");
        } catch (SecurityException | IOException e) {
            e.printStackTrace();
        }
    }


public class MyFilter implements Filter {

    @Override
    public boolean isLoggable(LogRecord log) {
        //don't log CONFIG logs in file
        if(log.getLevel() == Level.CONFIG) return false;
        return true;
    }

}


public class MyFormatter extends Formatter {

    @Override
    public String format(LogRecord record) {
        return record.getThreadID()+"::"+record.getSourceClassName()+"::"
                +record.getSourceMethodName()+"::"
                +new Date(record.getMillis())+"::"
                +record.getMessage()+"\n";
    }

}

public class MyHandler extends StreamHandler {

    @Override
    public void publish(LogRecord record) {
        //add own logic to publish
        super.publish(record);
    }


    @Override
    public void flush() {
        super.flush();
    }


    @Override
    public void close() throws SecurityException {
        super.close();
    }

}

请为两个命名记录器设置
additivity=false

另外,添加一个根记录器配置,以告知Log4j2在哪里发送除“file1”和“file2”记录器以外的日志调用:

rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
此外,请为您的命名记录器指定一个唯一的前缀:

logger.aaa.name = file1
logger.aaa.additivity = false
logger.aaa.level = debug
logger.aaa.appenderRef.rrr.ref = RollingFile1

logger.bbb.name = file2
logger.bbb.additivity = false
logger.bbb.level = debug
logger.bbb.appenderRef.sss.ref = RollingFile2

嘿,试试这个链接@CowboyFarnz我想要log4j2的属性文件而不是log4jI在log4j2配置中是新的两个文件存储相同的日志:你看到了什么?2018-01-29 15:40:42信息日志:190-文件2只保存到analytics.log文件更新了我的答案很高兴听到这个