Log4J не пишет в файл журнала - PullRequest
0 голосов
/ 03 мая 2018

Я начал использовать плагин Eclipse Log4E и создал файл log4j2.properties , например:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\Robinsonfile\log\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
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

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.logger.de.test=warn
log4j.rootLogger=warn

Это модифицированный пример из документации для создания файла свойств, который записывает в log4j.appender.file.File , я уже пробовал экранировать \ with \\, но тот же результат, что файл не создан. Кто-нибудь может сказать мне, что я делаю не так? Ниже моего кода

/**
 * Logger for this class
 */
private static final Logger logger = LogManager.getLogger(RobinsonAutomation.class.getName());

private static final String ROBINSON = "Bitte robinson-lite.exe auswaehlen";
private static final String WHITELIST = "Bitte Whitelist Textdatei ";
private static final String ALL_CONTACTS = "Bitte die original Textdatei (alle Emailkontakte) auswaehlen";

private final FileNameExtensionFilter textFilter = new FileNameExtensionFilter("Text File", "txt");
private final FileNameExtensionFilter exeFilter = new FileNameExtensionFilter("Robinson.exe", "exe");


private List<String> getContacts(File file) {
    if (logger.isDebugEnabled()) {
        logger.debug("getContacts(File) - start"); //$NON-NLS-1$
    }

    checkNotNull(file);
    try {
        List<String> returnList = Files.readLines(file, Charset.forName("UTF-8"));
        if (logger.isDebugEnabled()) {
            logger.debug("getContacts(File) - end"); //$NON-NLS-1$
        }
        return returnList;
    } catch (IOException e) {
        logger.error("getContacts(File)", e); //$NON-NLS-1$

        String message = "Error could not read file\n".concat(e.getMessage());
        JOptionPane.showMessageDialog(new JFrame(), message, "Error", JOptionPane.ERROR_MESSAGE);
    }

    if (logger.isDebugEnabled()) {
        logger.debug("getContacts(File) - end"); //$NON-NLS-1$
    }
    return null;
}

private File getFile(DataSources dataSource) {
    if (logger.isDebugEnabled()) {
        logger.debug("getFile(DataSources) - start"); //$NON-NLS-1$
    }

    if (dataSource.equals(DataSources.ROBINSON))
        return returnFile(this.getROBINSON(), exeFilter);
    else if (dataSource.equals(DataSources.ALL_CONTACTS))
        return returnFile(RobinsonAutomation.ALL_CONTACTS, textFilter);
    else
        return returnFile(RobinsonAutomation.WHITELIST, textFilter);
}

private File returnFile(String title, FileNameExtensionFilter fileFilter) {
    if (logger.isDebugEnabled()) {
        logger.debug("returnFile(String, FileNameExtensionFilter) - start"); //$NON-NLS-1$
    }

    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setDialogTitle(title);
    fileChooser.setFileFilter(fileFilter);
    fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
    int result = fileChooser.showOpenDialog(this);
    checkArgument(result == JFileChooser.APPROVE_OPTION);
    File returnFile = fileChooser.getSelectedFile();
    if (logger.isDebugEnabled()) {
        logger.debug("returnFile(String, FileNameExtensionFilter) - end"); //$NON-NLS-1$
    }
    return returnFile;
}


public static void main(String[] args) throws IOException {
    org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.DEBUG);
    System.out.println(logger.isDebugEnabled());
    if (logger.isDebugEnabled()) {
        logger.debug("main(String[]) - start"); //$NON-NLS-1$
    }

    RobinsonAutomation robinsonAutomation = new RobinsonAutomation();
    File robinsonEXE = robinsonAutomation.getFile(DataSources.ROBINSON);
    String pathToRobinson = robinsonEXE.getAbsolutePath();
    CommandLine commandLine = new CommandLine(pathToRobinson);
    DefaultExecutor executor = new DefaultExecutor();
    executor.execute(commandLine);
    try {
        Thread.sleep(40000);
    } catch (InterruptedException e) {
        logger.error("main(String[])", e); //$NON-NLS-1$
    }
    File originalContacts = robinsonAutomation.getFile(DataSources.ALL_CONTACTS);
    String current_directory = originalContacts.getAbsolutePath();
    ArrayList<String> orig_contacts = Lists.newArrayList(robinsonAutomation.getContacts(originalContacts));
    checkNotNull(orig_contacts, "Bitte keine leere Datei hinzufuegen");
    File whitelist_file = robinsonAutomation.getFile(DataSources.WHITELIST);
    ArrayList<String> whitelist_contacts = Lists.newArrayList(robinsonAutomation.getContacts(whitelist_file));
    checkNotNull(whitelist_contacts, "Keine Whitelist-Kontakte vorhanden");
    ArrayList<String> blacklist = (ArrayList<String>) DataReader.createBlackList(orig_contacts, whitelist_contacts);
    checkNotNull(blacklist, "Keine Blacklist-Kontakte vorhanden");
    DataReader.writeBlacklistFile(blacklist);

    if (logger.isDebugEnabled()) {
        logger.debug("main(String[]) - end"); //$NON-NLS-1$
    }
}

1 Ответ

0 голосов
/ 05 мая 2018

Ответ Антона верен, но у вас также есть две строки настройки log4j.rootLogger:

# Root logger option
log4j.rootLogger=INFO, file, stdout
# ...
log4j.rootLogger=warn

Применяется последний, который устанавливает уровень корневого логгера на WARN, но не назначает ему никаких дополнений. Вы, вероятно, хотите удалить эту строку.

...