如何使用java.util.logging更改存储日志的目录*
我在tomcat下运行一个web应用程序,并且我已经像这样配置了日志记录(通过ContextInitializedHook):如何使用java.util.logging更改存储日志的目录*,java,tomcat,logging,Java,Tomcat,Logging,我在tomcat下运行一个web应用程序,并且我已经像这样配置了日志记录(通过ContextInitializedHook): 不幸的是,日志不是在/var/log下创建的。它们是在/var/lib/tomcat6/like/var/lib/tomcat6/myapp_2012-08-13_0.log中创建的。我想将其更改为/var/log/myapp/like:/var/log/myapp/myapp_2012-08-13_0.log我在文件记录器上看不到任何可以实现此目的的设置。我是否遗漏了
不幸的是,日志不是在/var/log下创建的。它们是在/var/lib/tomcat6/like/var/lib/tomcat6/myapp_2012-08-13_0.log中创建的。我想将其更改为/var/log/myapp/like:/var/log/myapp/myapp_2012-08-13_0.log我在文件记录器上看不到任何可以实现此目的的设置。我是否遗漏了一些明显的东西,或者是否有办法实现它?您可以使用JVM属性在文件名前面加上前缀。在下面的示例过程中,类似于-Dlog\u directory=C:\logs
package sample;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.XMLFormatter;
import org.apache.commons.lang.StringUtils;
public class stackoverflow11937181 {
/**
* @param args
*/
public static void main(String[] args) {
Logger rootLogger = Logger.getLogger("");
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String logDirectory = System.getProperty("log_directory");
String logFile = (logDirectory == null ? StringUtils.EMPTY : logDirectory) + "/myapp_" + date + "_%u.log";
try {
FileHandler logHandler = new FileHandler(logFile, 524288000, // 500 MB max size
1, // one log file at a time
true // if it exists: append, don't overwrite
);
Level defaultLevel = Level.INFO;
logHandler.setFormatter(new XMLFormatter());
logHandler.setLevel(java.util.logging.Level.FINE);
for (Handler h : rootLogger.getHandlers()) {
rootLogger.removeHandler(h);
}
rootLogger.setLevel(defaultLevel);
rootLogger.addHandler(logHandler);
}
catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rootLogger.log(Level.FINE, "sample");
}
}
您可以使用JVM属性作为文件名的前缀。在下面的示例过程中,类似于-Dlog\u directory=C:\logs
package sample;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.XMLFormatter;
import org.apache.commons.lang.StringUtils;
public class stackoverflow11937181 {
/**
* @param args
*/
public static void main(String[] args) {
Logger rootLogger = Logger.getLogger("");
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String logDirectory = System.getProperty("log_directory");
String logFile = (logDirectory == null ? StringUtils.EMPTY : logDirectory) + "/myapp_" + date + "_%u.log";
try {
FileHandler logHandler = new FileHandler(logFile, 524288000, // 500 MB max size
1, // one log file at a time
true // if it exists: append, don't overwrite
);
Level defaultLevel = Level.INFO;
logHandler.setFormatter(new XMLFormatter());
logHandler.setLevel(java.util.logging.Level.FINE);
for (Handler h : rootLogger.getHandlers()) {
rootLogger.removeHandler(h);
}
rootLogger.setLevel(defaultLevel);
rootLogger.addHandler(logHandler);
}
catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rootLogger.log(Level.FINE, "sample");
}
}
啊,这很明显:一个带有绝对路径的绝对文件名。我应该想到这一点。看来是可行的,thx.Ah,这是显而易见的:一个带有绝对路径的绝对文件名。我应该想到这一点。看来有用,谢谢。