我为DailyRollingFileAppender提供了以下简单的Test类来每小时滚动日志文件。我面临的问题是,它似乎并没有每小时翻转到新的日志文件,即使我已经设置为'。'yyyy-MM-dd-HH。知道我在错误的代码中的位置吗?
public class Test {
static Logger logger = Logger.getLogger(Test.class);
public static void main(String args[]) throws Exception {
String pattern = "%-20d{dd MMM yyyy HH:mm:ss} [%-5p] - %m%n";
PatternLayout patternLayout = new PatternLayout(pattern);
//CREATE APPENDER.
DailyRollingFileAppender myAppender = new DailyRollingFileAppender(patternLayout, "TestOrig.log", "'.'yyyy-MM-dd-HH");
//ADD APPENDER & LEVEL.
logger.addAppender(myAppender);
logger.setLevel ((Level) Level.DEBUG);
//WRITE MESSAGES.
logger.debug("Successful");
logger.info ("Failed" );
logger.warn ("Failed" );
logger.error("Successful");
logger.fatal("Failed");
while(true)
{
Thread.sleep(1000);
}
}
}
答案 0 :(得分:0)
我在这里看不到任何错误。当我试着几分钟时,我可以看到这是创建文件。
DailyRollingFileAppender myAppender = new DailyRollingFileAppender(patternLayout, "TestOrig.log", "'.'yyyy-MM-dd-HH-mm");
你在控制台上看到任何错误吗?
可能的错误原因可能是,您尝试多次运行相同的程序,而不会结束以前启动的程序,这会导致文件访问权限问题。
答案 1 :(得分:0)
目标是从第1分钟开始每59.5分钟为您的日志发一个帖子。
他的解决方案需要有关如何使用Runnable和Thread的基本标准知识。我假设您正在运行标准应用程序而不是在受管服务器环境中
Runnable
run()
循环将while
方法覆盖为true
布尔变量(isAlive),当您的应用关闭时,您的应用可以设置为false
。.info("Logger Text")
的{{1}}方法,循环等待时间为60分钟。static Logger logger = Logger.getLogger(YourClassName.class);
投入Runnable
对象new Thread()
帖子。run()方法可以是
info()
在开始public void run() {
while (isAlive) { // isAlive is a global-level (static, even) boolean
// you declared earlier as true, your app should set it to false
// if your app decides to exit
try {
logger.info("Rollover Log Text");
Thread.currentThread().sleep(1000 * 60 * 60); // 60 minutes
} catch (InterruptedException ignore) {
}
}
}
之前,请务必将isAlive
设置为true
,在关机或错误/异常关闭时将其设置为Thread
,然后调用{{1}设置为false
后线程的方法。这应该每小时记录一次。
答案 2 :(得分:0)
使用@Singleton和@Schedule为您的计时器服务创建一个类似ejb cron的计划。
import javax.ejb.Schedule;
import javax.ejb.Singleton;
@Singleton
public class Cron {
static Logger logger = Logger.getLogger(Test.class);
@Schedule(second="0", minute="0", hour="0", dayOfWeek="*", persistent=false)
public void rollLogs() {
logger.info("midnight");
}
}