Log4j2将日志文件保存在APPDATA中

时间:2015-04-10 15:07:34

标签: java log4j2

过去两天我遇到了一个重大问题。我已经设置了一个RollingFile,它将我的日志文件保存在我的程序的APPDATA目录中,但只有我的绝对路径。这适用于我的机器。

我在网上搜索了如何动态设置它并找到了一些示例,但没有一个能够工作。我希望这里的任何人都可以帮助我解决我的问题。

编辑:我在下面发布的代码的问题是它没有记录任何消息。控制台工作正常,我的绝对路径也正常。

我想到的两件事是我通常在系统变量中保存appdata路径太晚或者属性设置不正确。

我的开始课程:

package de.bnd_games.financemanagment.start;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.SwingConstants;
import javax.swing.JButton;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import de.bnd_games.financemanagment.utilities.FileCreater;
import de.bnd_games.financemanagment.utilities.Props;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

@SuppressWarnings("serial")
public class StartScreen extends JFrame {
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        System.setProperty("user.home", System.getenv("APPDATA"));
        Logger logger = LogManager.getLogger(StartScreen.class.getName());
        logger.debug(System.getProperty("user.home"));
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                Logger logger = LogManager.getLogger(StartScreen.class.getName());
                logger.info("Starte Finance Managment");
                try {
                    StartScreen frame = new StartScreen();
                    frame.setVisible(true);
                    if (checkProperties() == true) {
                        logger.info("Erst Konfiguration wird gestartet.");
                        StartConfig.main();
                        frame.dispose();
                    } else {
                        logger.info("Starten der Login Maske");
                        StartLogin.main();
                        frame.dispose();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public StartScreen() {
        setTitle("Finanzverwaltung");
        setResizable(false);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblFinanzverwaltung = new JLabel("Finanzverwaltung");
        lblFinanzverwaltung.setHorizontalAlignment(SwingConstants.CENTER);
        lblFinanzverwaltung.setFont(new Font("Script MT Bold", Font.PLAIN, 39));
        lblFinanzverwaltung.setBounds(10, 61, 424, 136);
        contentPane.add(lblFinanzverwaltung);

        JButton btnAbbrechen = new JButton("Abbrechen");
        btnAbbrechen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Logger logger = LogManager.getLogger(StartScreen.class.getName());
                logger.info("Programm beendet.");
                System.exit(0);
            }
        });
        btnAbbrechen.setBounds(303, 237, 111, 23);
        contentPane.add(btnAbbrechen);
    }

    private static Boolean checkProperties() {
        Logger logger = LogManager.getLogger(StartScreen.class.getName());
        logger.info("Starte checkProperties");
        String verzeichniss = "\\Finanzverwaltung";
        String datei = "\\Finanzverwaltung\\config.properties";

        String pfad_verzeichniss = System.getenv("APPDATA") + verzeichniss;
        String pfad_datei = System.getenv("APPDATA") + datei;
        FileCreater.checkDirectoryAndCreate(pfad_verzeichniss);

        if (FileCreater.checkDirectory(pfad_datei) == false) {
            logger.debug("Keine Properties Datei gefunden");
            FileCreater.createPropertiesFile();
            return true;
        } else {
            logger.debug("Properties Datei gefunden");
            if (Props.readPropertiesSetting("erst_konfiguration").equals(
                    "abgeschlossen")) {
                logger.debug("Erst Konfiguration ist bereits abgeschlossen");
                return false;
            } else {
                logger.warn("Erst Konfiguration wurde noch nicht abgeschlossen");
                return true;
            }
        }
    }
}

这是我对log4j2的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Properties>
    <Property name="log-path">${user.home}\Finanzverwaltung\Logs\</Property>
</Properties>

<Appenders>
    <RollingFile name="file-log" fileName="${user.home}/Finanzverwaltung/Logs/alpha1.log"
        filePattern="${log-path}/alpha1-%d{yyyy-MM-dd}.log">
        <PatternLayout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} | %-5p | %F:%L | %m%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>
    <Console name="console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} | %-5p | %F:%L | %m%n"/>
    </Console>
</Appenders>

<Loggers>
    <Root level="debug" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="file-log"/>
    </Root>
</Loggers>
</Configuration>

0 个答案:

没有答案