Quartz1.8.5例子(四)

时间:2020-12-20 19:34:09
/*
* Copyright 2005 - 2009 Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/ package org.quartz.examples.example4; import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob; /**
* <p>
* This is just a simple job that receives parameters and
* maintains state
* </p>
*
* @author Bill Kratzer
*/
public class ColorJob implements StatefulJob { private static Logger _log = LoggerFactory.getLogger(ColorJob.class); // parameter names specific to this job
public static final String FAVORITE_COLOR = "favorite color";
public static final String EXECUTION_COUNT = "count"; // Since Quartz will re-instantiate a class every time it
// gets executed, members non-static member variables can
// not be used to maintain state!
private int _counter = 1; /**
* <p>
* Empty constructor for job initilization
* </p>
* <p>
* Quartz requires a public empty constructor so that the
* scheduler can instantiate the class whenever it needs.
* </p>
*/
public ColorJob() {
} /**
* <p>
* Called by the <code>{@link org.quartz.Scheduler}</code> when a
* <code>{@link org.quartz.Trigger}</code> fires that is associated with
* the <code>Job</code>.
* </p>
*
* @throws JobExecutionException
* if there is an exception while executing the job.
*/
public void execute(JobExecutionContext context)
throws JobExecutionException { // This job simply prints out its job name and the
// date and time that it is running
String jobName = context.getJobDetail().getFullName(); // Grab and print passed parameters
JobDataMap data = context.getJobDetail().getJobDataMap();
String favoriteColor = data.getString(FAVORITE_COLOR);
int count = data.getInt(EXECUTION_COUNT);
_log.info("ColorJob: " + jobName + " executing at " + new Date() + "\n" +
" favorite color is " + favoriteColor + "\n" +
" execution count (from job map) is " + count + "\n" +
" execution count (from job member variable) is " + _counter); // increment the count and store it back into the
// job map so that job state can be properly maintained
count++;
data.put(EXECUTION_COUNT, count); // Increment the local member variable
// This serves no real purpose since job state can not
// be maintained via member variables!
_counter++;
} }
/*
* Copyright 2005 - 2009 Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/ package org.quartz.examples.example4; import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory; /**
* This Example will demonstrate how job parameters can be
* passed into jobs and how state can be maintained
*
* @author Bill Kratzer
*/
public class JobStateExample { public void run() throws Exception {
Logger log = LoggerFactory.getLogger(JobStateExample.class); log.info("------- Initializing -------------------"); // First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); log.info("------- Initialization Complete --------"); log.info("------- Scheduling Jobs ----------------"); // get a "nice round" time a few seconds in the future....
long ts = TriggerUtils.getNextGivenSecondDate(null, 10).getTime(); // job1 will only run 5 times, every 10 seconds
JobDetail job1 = new JobDetail("job1", "group1", ColorJob.class);
SimpleTrigger trigger1 = new SimpleTrigger("trigger1", "group1", "job1", "group1",
new Date(ts), null, 4, 10000);
// pass initialization parameters into the job
job1.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Green");
job1.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1); // schedule the job to run
Date scheduleTime1 = sched.scheduleJob(job1, trigger1);
log.info(job1.getFullName() +
" will run at: " + scheduleTime1 +
" and repeat: " + trigger1.getRepeatCount() +
" times, every " + trigger1.getRepeatInterval() / 1000 + " seconds"); // job2 will also run 5 times, every 10 seconds
JobDetail job2 = new JobDetail("job2", "group1", ColorJob.class);
SimpleTrigger trigger2 = new SimpleTrigger("trigger2", "group1", "job2", "group1",
new Date(ts + 1000), null, 4, 10000);
// pass initialization parameters into the job
// this job has a different favorite color!
job2.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Red");
job2.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1); // schedule the job to run
Date scheduleTime2 = sched.scheduleJob(job2, trigger2);
log.info(job2.getFullName() +
" will run at: " + scheduleTime2 +
" and repeat: " + trigger2.getRepeatCount() +
" times, every " + trigger2.getRepeatInterval() / 1000 + " seconds"); log.info("------- Starting Scheduler ----------------"); // All of the jobs have been added to the scheduler, but none of the jobs
// will run until the scheduler has been started
sched.start(); log.info("------- Started Scheduler -----------------"); log.info("------- Waiting 60 seconds... -------------");
try {
// wait five minutes to show jobs
Thread.sleep(60L * 1000L);
// executing...
} catch (Exception e) {
} log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData();
log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { JobStateExample example = new JobStateExample();
example.run();
} }

  

/*
* Copyright 2005 - 2009 Terracotta, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/ package org.quartz.examples.example4; import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory; /**
* This Example will demonstrate how job parameters can be
* passed into jobs and how state can be maintained
*
* @author Bill Kratzer
*/
public class JobStateExample { public void run() throws Exception {
Logger log = LoggerFactory.getLogger(JobStateExample.class); log.info("------- Initializing -------------------"); // First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); log.info("------- Initialization Complete --------"); log.info("------- Scheduling Jobs ----------------"); // get a "nice round" time a few seconds in the future....
long ts = TriggerUtils.getNextGivenSecondDate(null, 10).getTime(); // job1 will only run 5 times, every 10 seconds
JobDetail job1 = new JobDetail("job1", "group1", ColorJob.class);
SimpleTrigger trigger1 = new SimpleTrigger("trigger1", "group1", "job1", "group1",
new Date(ts), null, 4, 10000);
// pass initialization parameters into the job
job1.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Green");
job1.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1); // schedule the job to run
Date scheduleTime1 = sched.scheduleJob(job1, trigger1);
log.info(job1.getFullName() +
" will run at: " + scheduleTime1 +
" and repeat: " + trigger1.getRepeatCount() +
" times, every " + trigger1.getRepeatInterval() / 1000 + " seconds"); // job2 will also run 5 times, every 10 seconds
JobDetail job2 = new JobDetail("job2", "group1", ColorJob.class);
SimpleTrigger trigger2 = new SimpleTrigger("trigger2", "group1", "job2", "group1",
new Date(ts + 1000), null, 4, 10000);
// pass initialization parameters into the job
// this job has a different favorite color!
job2.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Red");
job2.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1); // schedule the job to run
Date scheduleTime2 = sched.scheduleJob(job2, trigger2);
log.info(job2.getFullName() +
" will run at: " + scheduleTime2 +
" and repeat: " + trigger2.getRepeatCount() +
" times, every " + trigger2.getRepeatInterval() / 1000 + " seconds"); log.info("------- Starting Scheduler ----------------"); // All of the jobs have been added to the scheduler, but none of the jobs
// will run until the scheduler has been started
sched.start(); log.info("------- Started Scheduler -----------------"); log.info("------- Waiting 60 seconds... -------------");
try {
// wait five minutes to show jobs
Thread.sleep(60L * 1000L);
// executing...
} catch (Exception e) {
} log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData();
log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { JobStateExample example = new JobStateExample();
example.run();
} }

  

[INFO] 02 二月 01:49:30.844 下午 main [org.quartz.examples.example4.JobStateExample]
------- Initializing ------------------- [INFO] 02 二月 01:49:30.868 下午 main [org.quartz.simpl.SimpleThreadPool]
Job execution threads will use class loader of thread: main [INFO] 02 二月 01:49:30.881 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl [INFO] 02 二月 01:49:30.882 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.1.8.5 created. [INFO] 02 二月 01:49:30.884 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized. [INFO] 02 二月 01:49:30.884 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v1.8.5) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. [INFO] 02 二月 01:49:30.884 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' [INFO] 02 二月 01:49:30.885 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 1.8.5 [INFO] 02 二月 01:49:30.885 下午 main [org.quartz.examples.example4.JobStateExample]
------- Initialization Complete -------- [INFO] 02 二月 01:49:30.885 下午 main [org.quartz.examples.example4.JobStateExample]
------- Scheduling Jobs ---------------- [INFO] 02 二月 01:49:30.890 下午 main [org.quartz.examples.example4.JobStateExample]
group1.job1 will run at: Tue Feb 02 13:49:40 CST 2016 and repeat: 4 times, every 10 seconds [INFO] 02 二月 01:49:30.890 下午 main [org.quartz.examples.example4.JobStateExample]
group1.job2 will run at: Tue Feb 02 13:49:41 CST 2016 and repeat: 4 times, every 10 seconds [INFO] 02 二月 01:49:30.891 下午 main [org.quartz.examples.example4.JobStateExample]
------- Starting Scheduler ---------------- [INFO] 02 二月 01:49:30.891 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. [INFO] 02 二月 01:49:30.891 下午 main [org.quartz.examples.example4.JobStateExample]
------- Started Scheduler ----------------- [INFO] 02 二月 01:49:30.891 下午 main [org.quartz.examples.example4.JobStateExample]
------- Waiting 60 seconds... ------------- [DEBUG] 02 二月 01:49:31.885 下午 Timer-0 [org.quartz.utils.UpdateChecker]
Checking for available updated version of Quartz... [DEBUG] 02 二月 01:49:40.008 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job1', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:49:40.026 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.core.JobRunShell]
Calling execute on job group1.job1 [INFO] 02 二月 01:49:40.026 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job1 executing at Tue Feb 02 13:49:40 CST 2016
favorite color is Green
execution count (from job map) is 1
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:49:41.001 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job2', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:49:41.002 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.core.JobRunShell]
Calling execute on job group1.job2 [INFO] 02 二月 01:49:41.002 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job2 executing at Tue Feb 02 13:49:41 CST 2016
favorite color is Red
execution count (from job map) is 1
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:49:50.000 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job1', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:49:50.000 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.core.JobRunShell]
Calling execute on job group1.job1 [INFO] 02 二月 01:49:50.001 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job1 executing at Tue Feb 02 13:49:50 CST 2016
favorite color is Green
execution count (from job map) is 2
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:49:51.001 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job2', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:49:51.002 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.core.JobRunShell]
Calling execute on job group1.job2 [INFO] 02 二月 01:49:51.002 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job2 executing at Tue Feb 02 13:49:51 CST 2016
favorite color is Red
execution count (from job map) is 2
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:00.000 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job1', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:00.001 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.core.JobRunShell]
Calling execute on job group1.job1 [INFO] 02 二月 01:50:00.001 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job1 executing at Tue Feb 02 13:50:00 CST 2016
favorite color is Green
execution count (from job map) is 3
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:01.000 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job2', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:01.000 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.core.JobRunShell]
Calling execute on job group1.job2 [INFO] 02 二月 01:50:01.001 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job2 executing at Tue Feb 02 13:50:01 CST 2016
favorite color is Red
execution count (from job map) is 3
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:10.001 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job1', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:10.001 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.core.JobRunShell]
Calling execute on job group1.job1 [INFO] 02 二月 01:50:10.001 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job1 executing at Tue Feb 02 13:50:10 CST 2016
favorite color is Green
execution count (from job map) is 4
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:11.001 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job2', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:11.002 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.core.JobRunShell]
Calling execute on job group1.job2 [INFO] 02 二月 01:50:11.002 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job2 executing at Tue Feb 02 13:50:11 CST 2016
favorite color is Red
execution count (from job map) is 4
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:20.000 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job1', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:20.000 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.core.JobRunShell]
Calling execute on job group1.job1 [INFO] 02 二月 01:50:20.001 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job1 executing at Tue Feb 02 13:50:20 CST 2016
favorite color is Green
execution count (from job map) is 5
execution count (from job member variable) is 1 [DEBUG] 02 二月 01:50:21.001 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]
Producing instance of Job 'group1.job2', class=org.quartz.examples.example4.ColorJob [DEBUG] 02 二月 01:50:21.002 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.core.JobRunShell]
Calling execute on job group1.job2 [INFO] 02 二月 01:50:21.002 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.examples.example4.ColorJob]
ColorJob: group1.job2 executing at Tue Feb 02 13:50:21 CST 2016
favorite color is Red
execution count (from job map) is 5
execution count (from job member variable) is 1 [INFO] 02 二月 01:50:30.905 下午 main [org.quartz.examples.example4.JobStateExample]
------- Shutting Down --------------------- [INFO] 02 二月 01:50:30.906 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. [INFO] 02 二月 01:50:30.906 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. [DEBUG] 02 二月 01:50:30.907 下午 main [org.quartz.simpl.SimpleThreadPool]
shutdown complete [INFO] 02 二月 01:50:30.908 下午 main [org.quartz.core.QuartzScheduler]
Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. [INFO] 02 二月 01:50:30.908 下午 main [org.quartz.examples.example4.JobStateExample]
------- Shutdown Complete ----------------- [INFO] 02 二月 01:50:30.909 下午 main [org.quartz.examples.example4.JobStateExample]
Executed 10 jobs. [DEBUG] 02 二月 01:50:31.029 下午 DefaultQuartzScheduler_Worker-10 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.029 下午 DefaultQuartzScheduler_Worker-9 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.093 下午 DefaultQuartzScheduler_Worker-7 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.093 下午 DefaultQuartzScheduler_Worker-8 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.179 下午 DefaultQuartzScheduler_Worker-6 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.179 下午 DefaultQuartzScheduler_Worker-5 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.240 下午 DefaultQuartzScheduler_Worker-3 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.258 下午 DefaultQuartzScheduler_Worker-4 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.295 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down. [DEBUG] 02 二月 01:50:31.339 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.simpl.SimpleThreadPool]
WorkerThread is shut down.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="default" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
</layout>
</appender> <logger name="org.quartz">
<level value="debug" />
</logger> <root>
<level value="debug" />
<appender-ref ref="default" />
</root> </log4j:configuration>