二进制之路
2008-11-12 10:35
浏览 258
已采纳

SSH中使用quartz产生了好多重复的日志

最近在改造一个项目, 由于需要使用定时任务处理一些工作, 于是使用了quartz. 由于对原有项目和quartz都不是很熟, 开发当中出现了这样一个问题:每执行一次quartz任务, 打印出的日志信息就越多.
1、Job类:

[code="java"]
public class MyTimerTask {
......

 //群发短信
public void startProcessSendSmsGroup(){
    logger.info("群送短信定时任务开始执行..........." + System.currentTimeMillis());
    try {
        this.sendSmsGroupService.send(); // 开始发送告警
    } catch (Exception e) {
        logger.error("执行MyTimerTask任务调度时发生错误!", e);
    }
    logger.info("群发短信定时任务执行结束..........." + System.currentTimeMillis());
}

......

}
[/code]

  2、quartz在Spring中的配置:

[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">


<!-- 向主任务类注入业务Bean -->
class="com.lenovo.platform.util.timer.MyTimerTask">



<!-- 设置调度任务 -->
<bean id="jobDetailProcessSendSmsGroup"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject">
        <ref bean="myTimerTask" />
    </property>
    <property name="targetMethod">
        <value>startProcessSendSmsGroup</value>
    </property>
</bean>

<!-- 设置调度引擎, 详细设置各调度任务与时间规则 -->
<bean id="cronTriggerProcessSendSmsGroup"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail">
        <ref bean="jobDetailProcessSendSmsGroup" />
    </property>
    <property name="cronExpression">
        <value>0 0/1 * * * ?</value>
    </property>
</bean>

<bean
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref local="cronTriggerProcessSendSmsGroup" />
        </list>
    </property>
</bean>


[/code]

3、
运行过程中打印出的日志如下:
第一次执行任务:
2008-11-12 10:19:00,109 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456340109>
2008-11-12 10:19:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456340203>

第二次执行任务:
2008-11-12 10:20:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456400015>
118406 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456400015
2008-11-12 10:20:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456400203>
118578 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456400203

第三次执行任务:
2008-11-12 10:21:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456460015>
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
2008-11-12 10:21:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456460031>
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031

......

2008-11-12 10:24:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <处理Syslog定时任务开始执行...........1226456640015>
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
2008-11-12 10:24:00,046 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456640046>
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046

  由于有多个任务, 像这样执行下去, catalina.out不用几天就达到上百G, 搞得服务器都没空间, 真是令我苦恼。请问各位朋友有没有遇到这种问题,朋友们帮忙解决一下,谢谢啦!!

[b]问题补充:[/b]
最近在改造一个项目, 由于需要使用定时任务处理一些工作, 于是使用了quartz. 由于对原有项目和quartz都不是很熟, 开发当中出现了这样一个问题:每执行一次quartz任务, 打印出的日志信息就越多.
1、Job类:

public class MyTimerTask {
    ......

     //群发短信
    public void startProcessSendSmsGroup(){
        logger.info("群送短信定时任务开始执行..........." + System.currentTimeMillis());
        try {
            this.sendSmsGroupService.send(); // 开始发送告警
        } catch (Exception e) {
            logger.error("执行MyTimerTask任务调度时发生错误!", e);
        }
        logger.info("群发短信定时任务执行结束..........." + System.currentTimeMillis());
    }
    
    ......
    
}
  2、quartz在Spring中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <!-- 向主任务类注入业务Bean -->
    <bean id="myTimerTask"
        class="com.lenovo.platform.util.timer.MyTimerTask">
        <property name="sendSmsGroupService">
            <ref bean="sendSmsGroupService" />
        </property>
    </bean>
    
    <!-- 设置调度任务 -->
    <bean id="jobDetailProcessSendSmsGroup"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="myTimerTask" />
        </property>
        <property name="targetMethod">
            <value>startProcessSendSmsGroup</value>
        </property>
    </bean>

    <!-- 设置调度引擎, 详细设置各调度任务与时间规则 -->
    <bean id="cronTriggerProcessSendSmsGroup"
        class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jobDetailProcessSendSmsGroup" />
        </property>
        <property name="cronExpression">
            <value>0 0/1 * * * ?</value>
        </property>
    </bean>

    <bean
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref local="cronTriggerProcessSendSmsGroup" />
            </list>
        </property>
    </bean>

</beans>

3、
运行过程中打印出的日志如下:
第一次执行任务:
2008-11-12 10:19:00,109 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456340109>
2008-11-12 10:19:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456340203>

第二次执行任务:
2008-11-12 10:20:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456400015>
118406 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456400015
2008-11-12 10:20:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456400203>
118578 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456400203

第三次执行任务:
2008-11-12 10:21:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456460015>
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
2008-11-12 10:21:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456460031>
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031

......

2008-11-12 10:24:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <处理Syslog定时任务开始执行...........1226456640015>
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
2008-11-12 10:24:00,046 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456640046>
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046

  由于有多个任务, 像这样执行下去, catalina.out不用几天就达到上百G, 搞得服务器都没空间, 真是令我苦恼。请问各位朋友有没有遇到这种问题,朋友们帮忙解决一下,谢谢啦!!

[color=red]哈, 大概发现问题所在了, 那程序里面有一段是发短信的程序. 当发送短信的设备不存在时, 会陷入等待状态.
我发现一等待时, 下次任务再执行时, 就会多一些类似DefaultQuartzScheduler_Worker*的信息.

zhjb2000说得挺接近的
[/color]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_21049 2008-11-13 17:42
    已采纳

    这个问题应该是部署引起的
    DefaultQuartzScheduler_Worker-4 这个应该是你的应用服务器调的,所以不是简单Log4j 级别信息能解决,估计你的 this.sendSmsGroupService.send(); // 开始发送告警 也被调了号多次,重复发送

    点赞 打赏 评论
  • bohemia 2008-11-12 10:56

    修改Log4j的配置,配置信息到Error级别就可以了.

    点赞 打赏 评论
  • laochake 2008-11-14 10:23

    楼主学一下log4j的配置

    点赞 打赏 评论

相关推荐 更多相似问题