做项目的时候,经常需要给应用打印日志,LOG4J是我们的不二选择,项目管理使用maven构建时,pom.xml配置如下
<!--日志 start--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <!--日志end-->
log4j.properties配置样例如下
### set log levels ###
log4j.rootLogger=DEBUG
### direct log messages to stdout ###
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-2p %m%n
### direct messages to file framework.log ###
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
##log4j.appender.A2.File=D:/logs/resmanm.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p(%10c{1}) %m%n
### application log config ###
#log4j.logger.com.linkage=ERROR,A2
log4j.logger.com.ch1=DEBUG,A1,A2
##log4j.logger.org.quartz.impl.StdSchedulerFactory=DEBUG,A1,A2
最后,附上一段定时器的demo,作为日志打印样例。
package com.ch1; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import static org.quartz.DateBuilder.evenMinuteDate; public class SimpleExample { public void run () throws SchedulerException { Logger log = LoggerFactory.getLogger(SimpleExample.class); log.info("------- Initializing ----------------------"); SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); log.info("------- Initialization Complete -----------"); // computer a time that is on the next round minute Date runTime = evenMinuteDate(new Date()); log.info("------- Scheduling Job -------------------"); // define the job and tie it to our HelloJob class JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity("job1","group1").build(); // Trigger the job to run on the next round minute Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1") .startAt(runTime).build(); // Start up the scheduler (nothing can actually run until the // scheduler has been started) sched.start(); log.info("------- Started Scheduler -----------------"); // wait long enough so that the scheduler as an opportunity to // run the job! log.info("------- Waiting 65 seconds... -------------"); try { // wait 65 seconds to show job Thread.sleep(65L * 1000L); } catch (InterruptedException e) { e.printStackTrace(); } // shut down the scheduler log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); } public static void main(String[] args) throws SchedulerException { SimpleExample example = new SimpleExample(); example.run(); } }
开发工具使用的是Idea,日志输出:
C:Javajdk1.8.0_144injava "-javaagent:D:Program FilesJetBrainsIntelliJ IDEA 2017.2.1libidea_rt.jar=56553:D:Program FilesJetBrainsIntelliJ IDEA 2017.2.1in" -Dfile.encoding=UTF-8 -classpath C:Javajdk1.8.0_144jrelibcharsets.jar;C:Javajdk1.8.0_144jrelibdeploy.jar;C:Javajdk1.8.0_144jrelibextaccess-bridge-64.jar;C:Javajdk1.8.0_144jrelibextcldrdata.jar;C:Javajdk1.8.0_144jrelibextdnsns.jar;C:Javajdk1.8.0_144jrelibextjaccess.jar;C:Javajdk1.8.0_144jrelibextjfxrt.jar;C:Javajdk1.8.0_144jrelibextlocaledata.jar;C:Javajdk1.8.0_144jrelibext ashorn.jar;C:Javajdk1.8.0_144jrelibextsunec.jar;C:Javajdk1.8.0_144jrelibextsunjce_provider.jar;C:Javajdk1.8.0_144jrelibextsunmscapi.jar;C:Javajdk1.8.0_144jrelibextsunpkcs11.jar;C:Javajdk1.8.0_144jrelibextzipfs.jar;C:Javajdk1.8.0_144jrelibjavaws.jar;C:Javajdk1.8.0_144jrelibjce.jar;C:Javajdk1.8.0_144jrelibjfr.jar;C:Javajdk1.8.0_144jrelibjfxswt.jar;C:Javajdk1.8.0_144jrelibjsse.jar;C:Javajdk1.8.0_144jrelibmanagement-agent.jar;C:Javajdk1.8.0_144jrelibplugin.jar;C:Javajdk1.8.0_144jrelib esources.jar;C:Javajdk1.8.0_144jrelib t.jar;E:cBSS微服务demoquartz_test argetclasses;C:Usersyulei.m2 epositoryorgquartz-schedulerquartz2.2.3quartz-2.2.3.jar;C:Usersyulei.m2 epositoryc3p0c3p0 .9.1.1c3p0-0.9.1.1.jar;C:Usersyulei.m2 epositoryorgquartz-schedulerquartz-jobs2.2.3quartz-jobs-2.2.3.jar;C:Usersyulei.m2 epositorylog4jlog4j1.2.17log4j-1.2.17.jar;C:Usersyulei.m2 epositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:Usersyulei.m2 epositoryorgslf4jslf4j-log4j121.7.25slf4j-log4j12-1.7.25.jar com.ch1.SimpleExample log4j:WARN File option not set for appender [A2]. log4j:WARN Are you using FileAppender instead of ConsoleAppender? log4j:ERROR Either File or DatePattern options are not set for appender [A2]. log4j:ERROR No output stream or file set for the appender named [A2]. INFO ------- Initializing ---------------------- log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. INFO ------- Initialization Complete ----------- INFO ------- Scheduling Job ------------------- INFO ------- Started Scheduler ----------------- INFO ------- Waiting 65 seconds... ------------- INFO ------- Shutting Down --------------------- INFO ------- Shutdown Complete ----------------- Process finished with exit code 0