Stop creating a log file if no logs are printed

I have the following simple Hello World:

public class App {
    private static final Logger log = Logger.getLogger(App.class);

    public static void main(String[] args) {
        System.out.println("Hello World!"); 
//        log.info("Test info log");
    }
}

And in log4j.propertiesfollow these steps:

# Root logger option
log4j.rootLogger=DEBUG,  file  
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=log.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Whenever I run the code, an empty file log.logis created even if the log is commented out.

How to create a log file only if logs are printed?

+4
source share
2 answers

This may provide a solution for this if you know where the first file is written to the file. You can create an appender file when you need to register.

    public static void addFileAppender() {
        FileAppender fileAppender = new FileAppender();
        fileAppender.setName("FileLogger");
        fileAppender.setFile("feature.log");
        fileAppender.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"));
        fileAppender.setThreshold(Level.DEBUG);
        fileAppender.setAppend(true);
        fileAppender.activateOptions();
        Logger.getRootLogger().addAppender(fileAppender);
    }
+1
source

Log4j , logger private static final Logger log = Logger.getLogger(App.class);. , , , , appender , .

:

log4j2.properties

rootLogger.level=trace
rootLogger.appenderRef.file-info.ref = FileInfo
rootLogger.appenderRef.file-debug.ref=FileDebug

appender.file-info.type=File
appender.file-info.name=FileInfo
appender.file-info.fileName=info.log
appender.file-info.layout.type=PatternLayout
appender.file-info.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.file-info.filter.filter-info.type=LevelRangeFilter
appender.file-info.filter.filter-info.minLevel=info
appender.file-info.filter.filter-info.maxLevel=info

appender.file-debug.type=File
appender.file-debug.name=FileDebug
appender.file-debug.fileName=debug.log
appender.file-debug.layout.type=PatternLayout
appender.file-debug.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
appender.file-debug.filter.filter-debug.type=LevelRangeFilter
appender.file-debug.filter.filter-debug.minLevel=debug
appender.file-debug.filter.filter-debug.maxLevel=debug 

case 1: info.log

public class App {
    private static final Logger log = LogManager.getLogger(App.class);

    public static void main(String[] args) {
        log.info("Test info log");
    }
}

case 2: info.log, debug.log

public class App {
    private static final Logger log = LogManager.getLogger(App.class);

    public static void main(String[] args) {
    }
}

case 3: info.log( ), debug.log()

public class App {
    private static final Logger log = LogManager.getLogger(App.class);

    public static void main(String[] args) {
        log.info("Test info log");
        Doc doc = new Doc();
    }
}

public class Doc {
    private static final Logger log = LogManager.getLogger(Doc.class);
}
-1

Source: https://habr.com/ru/post/1694055/


All Articles