iPhone home键坏了怎么重启北京哪里修的好

3606人阅读
源码学习(3)
Java行进中(13)
&&& 接到个需求,通过log4j定时打印日志,需求描述如下:需要能够定时打印日志,时间间隔可配。说到定时,首先想到了DailyRollingFileAppender类,各种定时,根据datePattern,这个可以参考类SimpleDateFormat类,常见的一些定时设置如下:
'.'yyyy-MM: 每月
'.'yyyy-ww: 每周
'.'yyyy-MM-dd: 每天
'.'yyyy-MM-dd-a: 每天两次
'.'yyyy-MM-dd-HH: 每小时
'.'yyyy-MM-dd-HH-mm: 每分钟
&&& 通过观察发现没有n分钟类似的日期格式,因此,在DailyRollingFileAppender类基础上进行自定义类的编写。过程如下:
&&1)拷贝DailyRollingFileAppender类源码并并改名MinuteRollingAppender,为了在log4j.xml中配置,增加配置项intervalTime并添加set、get方法;
private int intervalTime = 10;
& 2)由于DailyRollingFileAppender类使用了RollingCalendar类来计算下一次间隔时间,而需要传递参数intervalTime,因此修改RollingCalendar类为内部类;由于其方法就是根据datePattern来计算下一次rollOver动作的时间,此时不需要其他的时间模式,修改方法如下:
public Date getNextCheckDate(Date now)
this.setTime(now);
this.set(Calendar.SECOND, 0);
this.set(Calendar.MILLISECOND, 0);
this.add(Calendar.MINUTE, intervalTime);
return getTime();
& 3)按照分钟可配时,时间模式就需要禁用了,将其改为static final,响应的去掉其get、set方法和MinuteRollingAppender构造函数中的datePattern参数
private static String DATEPATTERN = &'.'yyyy-MM-dd-HH-mm'.log'&;
&&& 同样,服务于多种datePattern的方法computeCheckPeriod()也可以删除; 至此改造就完成了,成品类如下:
package net.csdn.
import java.io.F
import java.io.IOE
import java.io.InterruptedIOE
import java.text.SimpleDateF
import java.util.C
import java.util.D
import java.util.GregorianC
import org.apache.log4j.FileA
import org.apache.log4j.L
import org.apache.log4j.helpers.LogL
import org.apache.log4j.spi.LoggingE
* 按分钟可配置定时appender
* @author coder_xia
public class MinuteRollingAppender extends FileAppender
* The date pattern. By default, the pattern is set to &'.'yyyy-MM-dd&
* meaning daily rollover.
private static String DATEPATTERN = &'.'yyyy-MM-dd-HH-mm'.log'&;
* 间隔时间,单位:分钟
private int intervalTime = 10;
* The log file will be renamed to the value of the scheduledFilename
* variable when the next interval is entered. For example, if the rollover
* period is one hour, the log file will be renamed to the value of
* &scheduledFilename& at the beginning of the next hour.
* The precise time when a rollover occurs depends on logging activity.
private String scheduledF
* The next time we estimate a rollover should occur.
private long nextCheck = System.currentTimeMillis() - 1;
Date now = new Date();
SimpleDateF
RollingCalendar rc = new RollingCalendar();
* The default constructor does nothing.
public MinuteRollingAppender()
* Instantiate a &code&MinuteRollingAppender&/code& and open the file
* designated by &code&filename&/code&. The opened filename will become the
* ouput destination for this appender.
public MinuteRollingAppender(Layout layout, String filename)
throws IOException
super(layout, filename, true);
activateOptions();
* @return the intervalTime
public int getIntervalTime()
return intervalT
* @param intervalTime
the intervalTime to set
public void setIntervalTime(int intervalTime)
this.intervalTime = intervalT
public void activateOptions()
super.activateOptions();
if (fileName != null)
now.setTime(System.currentTimeMillis());
sdf = new SimpleDateFormat(DATEPATTERN);
File file = new File(fileName);
scheduledFilename = fileName
+ sdf.format(new Date(file.lastModified()));
.error(&Either File or DatePattern options are not set for appender [&
+ name + &].&);
* Rollover the current file to a new file.
void rollOver() throws IOException
String datedFilename = fileName + sdf.format(now);
// It is too early to roll over because we are still within the
// bounds of the current interval. Rollover will occur once the
// next interval is reached.
if (scheduledFilename.equals(datedFilename))
// close current file, and rename it to datedFilename
this.closeFile();
File target = new File(scheduledFilename);
if (target.exists())
target.delete();
File file = new File(fileName);
boolean result = file.renameTo(target);
if (result)
LogLog.debug(fileName + & -& & + scheduledFilename);
LogLog.error(&Failed to rename [& + fileName + &] to [&
+ scheduledFilename + &].&);
// This will also close the file. This is OK since multiple
// close operations are safe.
this.setFile(fileName, true, this.bufferedIO, this.bufferSize);
catch (IOException e)
errorHandler.error(&setFile(& + fileName + &, true) call failed.&);
scheduledFilename = datedF
* This method differentiates MinuteRollingAppender from its super class.
* Before actually logging, this method will check whether it is time to do
* a rollover. If it is, it will schedule the next rollover time and then
* rollover.
protected void subAppend(LoggingEvent event)
long n = System.currentTimeMillis();
if (n &= nextCheck)
now.setTime(n);
nextCheck = rc.getNextCheckMillis(now);
rollOver();
catch (IOException ioe)
if (ioe instanceof InterruptedIOException)
Thread.currentThread().interrupt();
LogLog.error(&rollOver() failed.&, ioe);
super.subAppend(event);
* RollingCalendar is a helper class to MinuteRollingAppender. Given a
* periodicity type and the current time, it computes the start of the next
* interval.
class RollingCalendar extends GregorianCalendar
private static final long serialVersionUID = -1814177L;
RollingCalendar()
public long getNextCheckMillis(Date now)
return getNextCheckDate(now).getTime();
public Date getNextCheckDate(Date now)
this.setTime(now);
this.set(Calendar.SECOND, 0);
this.set(Calendar.MILLISECOND, 0);
this.add(Calendar.MINUTE, intervalTime);
return getTime();
测试配置文件如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE log4j:configuration SYSTEM &log4j.dtd&&
&log4j:configuration xmlns:log4j=&http://jakarta.apache.org/log4j/&&
&appender name=&myFile& class=&net.csdn.blog.MinuteRollingAppender&&
&param name=&File& value=&log4jTest.log& /&
&param name=&Append& value=&true& /&
&param name=&intervalTime& value=&2&/&
&layout class=&org.apache.log4j.PatternLayout&&
&param name=&ConversionPattern& value=&%p %d (%c:%L)- %m%n& /&
&/appender&
&priority value=&debug&/&
&appender-ref ref=&myFile&/&
&/log4j:configuration&
&&&&& 关于定时实现,还可以采用java提供的Timer实现,也就免去了每次记录日志时计算并且比较时间,区别其实就是自己起个线程与调用rollOver方法,实现如下:
package net.csdn.
import java.io.F
import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import java.util.T
import java.util.TimerT
import org.apache.log4j.FileA
import org.apache.log4j.L
import org.apache.log4j.helpers.LogL
public class TimerTaskRollingAppender extends FileAppender
* The date pattern. By default, the pattern is set to &'.'yyyy-MM-dd&
* meaning daily rollover.
private static final String DATEPATTERN = &'.'yyyy-MM-dd-HH-mm'.log'&;
* 间隔时间,单位:分钟
private int intervalTime = 10;
SimpleDateFormat sdf = new SimpleDateFormat(DATEPATTERN);
* The default constructor does nothing.
public TimerTaskRollingAppender()
* Instantiate a &code&TimerTaskRollingAppender&/code& and open the file
* designated by &code&filename&/code&. The opened filename will become the
* ouput destination for this appender.
public TimerTaskRollingAppender(Layout layout, String filename)
throws IOException
super(layout, filename, true);
activateOptions();
* @return the intervalTime
public int getIntervalTime()
return intervalT
* @param intervalTime
the intervalTime to set
public void setIntervalTime(int intervalTime)
this.intervalTime = intervalT
public void activateOptions()
super.activateOptions();
Timer timer = new Timer();
timer.schedule(new LogTimerTask(), 1000, intervalTime * 60000);
class LogTimerTask extends TimerTask
public void run()
String datedFilename = fileName + sdf.format(new Date());
closeFile();
File target = new File(datedFilename);
if (target.exists())
target.delete();
File file = new File(fileName);
boolean result = file.renameTo(target);
if (result)
LogLog.debug(fileName + & -& & + datedFilename);
LogLog.error(&Failed to rename [& + fileName + &] to [&
+ datedFilename + &].&);
setFile(fileName, true, bufferedIO, bufferSize);
catch (IOException e)
errorHandler.error(&setFile(& + fileName
+ &, true) call failed.&);
& & 不过,以上实现,存在2个问题:
& &1)并发
& & 并发问题可能发生的一个地方在run()中调用closeFile();后,正好subAppend()方法写日志,此刻文件已关闭,则会报以下错误:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
..............................& &解决方法比较简单,直接让整个run()方法为同步的,加上synchronized关键字即可;不过目前楼主没有解决如果真要写,而且写的速度够快的情况下可能丢失日志的情况;
& &2)性能
& & 使用Timer实现比较简单,但是Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行,解决方法也比较简单,采用线程池版定时器类ScheduledExecutorService,实现如下:
package net.csdn.
import java.io.F
import java.io.IOE
import java.text.SimpleDateF
import java.util.D
import java.util.concurrent.E
import java.util.concurrent.TimeU
import org.apache.log4j.FileA
import org.apache.log4j.L
import org.apache.log4j.helpers.LogL
* @author coder_xia
采用ScheduledExecutorService实现定时配置打印日志
public class ScheduledExecutorServiceAppender extends FileAppender
* The date pattern. By default, the pattern is set to &'.'yyyy-MM-dd&
* meaning daily rollover.
private static final String DATEPATTERN = &'.'yyyy-MM-dd-HH-mm'.log'&;
* 间隔时间,单位:分钟
private int intervalTime = 10;
SimpleDateFormat sdf = new SimpleDateFormat(DATEPATTERN);
* The default constructor does nothing.
public ScheduledExecutorServiceAppender()
* Instantiate a &code&ScheduledExecutorServiceAppender&/code& and open the
* file designated by &code&filename&/code&. The opened filename will become
* the ouput destination for this appender.
public ScheduledExecutorServiceAppender(Layout layout, String filename)
throws IOException
super(layout, filename, true);
activateOptions();
* @return the intervalTime
public int getIntervalTime()
return intervalT
* @param intervalTime
the intervalTime to set
public void setIntervalTime(int intervalTime)
this.intervalTime = intervalT
public void activateOptions()
super.activateOptions();
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
new LogTimerTask(), 1, intervalTime * 60000,
TimeUnit.MILLISECONDS);
class LogTimerTask implements Runnable
public void run()
String datedFilename = fileName + sdf.format(new Date());
closeFile();
File target = new File(datedFilename);
if (target.exists())
target.delete();
File file = new File(fileName);
boolean result = file.renameTo(target);
if (result)
LogLog.debug(fileName + & -& & + datedFilename);
LogLog.error(&Failed to rename [& + fileName + &] to [&
+ datedFilename + &].&);
setFile(fileName, true, bufferedIO, bufferSize);
catch (IOException e)
errorHandler.error(&setFile(& + fileName
+ &, true) call failed.&);
&&&&& 关于定时的实现,差不多就到这里了,采用的都默认是10分钟产生一个新的日志文件,在配置时可以自行设置,不过存在的一个隐患,万一配置的人不知道时间间隔是分钟,如果以为是秒,配了个600,又开了debug,产生上G的日志文件,这肯定是个灾难,下面的改造就是结合RollingFileAppender的最大大小和最多备份文件个数可配,再次进行完善,下次继续描述改造过程。
&&&另外,关于log4j,有很多比较好的log4j的参考链接,比如:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:307664次
积分:3753
积分:3753
排名:第6850名
原创:111篇
转载:13篇
评论:110条
(1)(1)(1)(2)(1)(2)(2)(2)(3)(1)(2)(1)(1)(1)(3)(1)(1)(2)(1)(2)(3)(1)(3)(1)(3)(4)(5)(1)(5)(4)(1)(1)(3)(2)(6)(15)(12)(13)(5)(1)(2)(2)(2)博客访问: 444
博文数量: 1
博客积分: 45
博客等级: 民兵
技术积分: 20
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
&&& 步骤如下:
建立一个log4j.properties文件,放到工程源文件夹下,如果是eclipse那么放到src下,eclipse会自动将这个文件加载到class目录下。如下图将log4j.jar和commons-logging.jar放到项目的类路径中。log4j.properties文件的配置如下:#--------------------------------
log4j.rootLogger=DEBUG, stdout, fileout
#log4j.logger.test=info
#log4j.logger.org.apache.jasper = DEBUG
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG
&&log4j.logger.com.fiscal = DEBUG
log4j.logger.com.system = DEBUG
&&log4j.logger.com.ibatis = DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG
log4j.logger.java.sql.Connection = DEBUG
#log4j.logger.java.sql.Statement = DEBUG
#log4j.logger.java.sql.PreparedStatement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
&&log4j.appender.stdout=org.apache.log4j.ConsoleAppender
&&log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=C:\\ibatis.log
log4j.appender.fileout.MaxFileSize=10000KB
&&log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n
&&#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
&&# log4j.logger.org=info
#--------------------------------
阅读(196) | 评论(0) | 转发(0) |
上一篇:没有了
下一篇:没有了
相关热门文章
给主人留下些什么吧!~~
请登录后评论。DRUID怎么使用log4j把所有执行的sql记录到.log日志文件?求配置参考
需求说明:使用druid作为数据库连接池,拦截所有执行的SQL语句&
不是使用druid内置昂的监控servlet页面 (/druid/index.html,这个已实现,可以正常访问) &监控的servlet页面可以拦截并看到所有执行的sql&
而是利用log4j、配置log4j.properties在.log日志文件里记录。(我想不但可以通过上面的看到,而且可以自动记录到.log日志文件中)
问题: 根据官方文档,进行了配置,可是 官方文档最关键的地方 log4j.properties里怎么配置的druid 拦截没有任何示例,在这里卡住了。
我的配置如下:
1、XML配置 datasrource (可以正常工作)
&context:property-placeholder location=&classpath:onelikeyouConfig.properties&/&
&bean id=&dataSource& class=&com.alibaba.druid.pool.DruidDataSource& init-method=&init& destroy-method=&close& &
&!-- 配置监控统计拦截的filters --&
&property name=&filters& value=&config,stat,log4j& /&
&!-- 基本属性 url、user、password --&
&property name=&url& value=&${jdbc.url}& /&
&property name=&username& value=&${jdbc.username}& /&
&property name=&password& value=&${jdbc.password}& /&
&!-- 配置初始化大小、最小、最大 --&
&property name=&initialSize& value=&1& /&
&property name=&minIdle& value=&1& /&
&property name=&maxActive& value=&20& /&
&!-- 配置获取连接等待超时的时间 --&
&property name=&maxWait& value=&60000& /&
&!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&
&property name=&timeBetweenEvictionRunsMillis& value=&60000& /&
&!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&
&property name=&minEvictableIdleTimeMillis& value=&300000& /&
&property name=&validationQuery& value=&SELECT 'x'& /&
&property name=&testWhileIdle& value=&true& /&
&property name=&testOnBorrow& value=&false& /&
&property name=&testOnReturn& value=&false& /&
&!-- 打开PSCache,并且指定每个连接上PSCache的大小 --&
&!--如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。--&
&!--&property name=&poolPreparedStatements& value=&false& /&--&
&!--&property name=&maxPoolPreparedStatementPerConnectionSize& value=&20& /&--&
&!--config.file=classpath:onelikeyouConfig.properties 提示解密 properties文件中必须有config.decrypt=true--&
&!--druid.stat.slowSqlMillis=5000 用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢--&
&property name=&connectionProperties& value=&config.file=classpath:onelikeyouConfig.druid.stat.slowSqlMillis=5000& /&
&!--用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢--&
2、log4j配置
log4j.rootLogger=INFO, normalOutput, errorOutPut
## 需要到第二天才会自动改名YYYY-MM-DD 之类的文件名 要调试 直接改系统日期 重启tomcat
## 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c:
## 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
log4j.appender.normalOutput=org.apache.log4j.DailyRollingFileAppender
log4j.appender.normalOutput.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.normalOutput.File=${webapp.root}/WEB-INF/logs/${yyyy-MM-dd}onelikeyou_APP
log4j.appender.normalOutput.MaxFileSize=100k
log4j.appender.normalOutput.layout=org.apache.log4j.PatternLayout
log4j.appender.normalOutput.layout.ConversionPattern=[%-5p] [%t]:%d %c %L - %m%n
log4j.appender.errorOutPut=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorOutPut.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.errorOutPut.Threshold = druid.sql.Statement
log4j.appender.errorOutPut.File=${webapp.root}/WEB-INF/logs/onelikeyou_ERROR
log4j.appender.errorOutPut.MaxFileSize=100k
log4j.appender.errorOutPut.layout=org.apache.log4j.PatternLayout
log4j.appender.errorOutPut.layout.ConversionPattern=[%-5p] [%t]:%d %c %L - %m%n
目前的日志配置是( 每天生成2个.log文件 可以正常工作)
& & & & & & & & & & & & 一个总的生成.log文件(/error..都会在这个里面),
& & & & & & & & & & & & 一个log.error(&错误信息输出&) ..专门生成一个.log文件 &(只显示error信息)
上面XML文件里已经加入了 stat过滤器,可以正常看到/druid/index.html 这里 servlet的监控页面,可以看到拦截的所有sql以及其他信息,
也加入了log4j过滤器 &可是,
我也想把 & &在&/druid/index.html 这里 servlet的监控页面看到拦截的所有sql & & &&&自动记录到.log文件中去,
该如何配置druid呢?或者说log4j.properties里该添加或修改些什么?
配置过很多遍了,没一次成功的。。
有配置成功过的帮帮忙吧,多谢了!
& & & & & & &&
关注一下,貌似单纯log sql没找见方法,我的配置如下
#system log--------------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %l %c%n%p: %m%n
log4j.rootLogger=info
log4j.logger.druid.sql=warn, stdout
log4j.logger.druid.sql.DataSource=warn, stdout
log4j.logger.druid.sql.Connection=warn, stdout
log4j.logger.druid.sql.Statement=warn, stdout
log4j.logger.druid.sql.ResultSet=warn, stdout 其中把log4j.logger.druid.sql.Statement后面改成debug,然后
appender重新指定成文件,就能基本完成log sql的需要。不过他是连带预编译语句的创建,设置参数,执行这三种一起log的
& 根据你的示例在参考官方文档设置相关参数应该可以搞定了。
谢谢 @& 的回答,我把你的内容补充到文档中了。
文档中也介绍了如何开关各种日志配置。
--- 共有 1 条评论 ---
原来是这样 多谢
log4j.properties ? 就不能配置在log4j.xml里面?
最近也在研究Druid,是否可能是 ClassLoader未按预期加载 log4j.properties
logback 呢?> 急Linux下用log4j打印日志,打印不出来解决办法
急Linux下用log4j打印日志,打印不出来解决办法
szxgh1971 & &
发布时间: & &
浏览:34 & &
回复:1 & &
悬赏:0.0希赛币
急~~~~~~~~~Linux下用log4j打印日志,打印不出来我用本机通过INonBlockingConnection nbc = new NonBlockingConnection(address.getHostName(), port,new ServerDataHander());
连接位于Linux上的一台服务器,我已经在相关的代码中已经用log4j进行日志打印。刚开始连接的时候,没有打印日志,我还以为没有连接上,可是后来用抓包工具抓包后,又发现已经建立起连接没并且也想服务器发送了数据,哎~~~~后来我又怀疑是权限的问题,我就吧日志以及日志所在的目录全部赋了对所有人都可执行读写的权限,以为可以了,可是连接服务器后,发现还是没有日志打印出来。。。我现在真的是没有办法了,请高手们指点下,谢谢了。。。
你试试重启服务啊,我以前遇到过类似的情况,我shutdown的时候,抛了一个错误没关掉,后来错误改了,关掉了,又startup,在运行,就可以了。。。希望对你有用啊szxxiaoyao & &
08:55:15 & &
& & (0)(0)引用
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&1682人阅读
java(31)
log4j-1.2.11.jar
log4j配置文件
log4j.properties
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=mpsmodel.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
#log4j.category.mons.dbcp=debug
#.ibatis=debug
#log4j.category.org.springframework=debug
#kai write
.ibatis = DEBUG&
.mon.jdbc.SimpleDataSource = DEBUG&
.mon.jdbc.ScriptRunner = DEBUG&
.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG&
log4j.logger.java.sql.Connection = DEBUG&
log4j.logger.java.sql.Statement = DEBUG&
log4j.logger.java.sql.PreparedStatement = DEBUG, fileout&
log4j.logger.java.sql.ResultSet = DEBUG&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:170815次
积分:2344
积分:2344
排名:第13087名
原创:65篇
转载:28篇
评论:32条
(1)(1)(2)(1)(1)(1)(5)(3)(2)(2)(3)(4)(2)(1)(1)(1)(6)(7)(1)(2)(2)(2)(2)(3)(1)(3)(3)(1)(2)(11)(15)(1)

我要回帖

更多关于 home键坏了怎么重启 的文章

 

随机推荐