过去两天我遇到了一个重大问题。我已经设置了一个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>