log4j.xml文件的配置
1.
log4j.xml配置文件设置
在jboss中hibernate启动时总是会写入一堆日志信息到
D:\jboss-4.0.2\server\default\log\server.log中,导致启动的时候速度比较慢,修
改应用程序的log4j.properties的配置也不起作用,后来发现修改log4j.xml的配
置可以屏蔽这些输出信息,提高启动速度
2. Log4j.xml配置文件内容具体的配置:
启动速度-->
……
logback-spring.xml配置
logback-spring.xml配置Spring2.x过后⾃带⽇志⼯具就是Slf4j使⽤ Spring Initializr 新建 Springboot 2.3.0.RELEASE 的项⽬POM内容如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 https:///xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>net.add1s</groupId><artifactId>slf4j-logback</artifactId><version>0.0.1-SNAPSHOT</version><name>slf4j-logback</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>资源⽂件夹resources下新建logback-spring.xml⽂档<?xml version="1.0" encoding="UTF-8"?><!--scan: 当此属性设置为true时,配置⽂件如果发⽣改变,将会被重新加载,默认值为true。
log4j输出到文件和数据库
log4j输出到文件和数据库控制台的实现就不说了,这里提供两种实例的配置,一种是输出为文件的(每天输出一个文件),一种为输出到数据库的配置。
1、输出到文件:Properties代码log4j.rootCategory=WARN, CONSOLE, FILE.surfilter.bt=FATAL,TOFILElog4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.TOFILE.Threshold=FATALlog4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.htmllog4j.appender.TOFILE.Append=truelog4j.appender.TOFILE.ImmediateFlush=truelog4j.appender.TOFILE.DatePattern='.'yyyy-MM-dd'.html'yout=com.surfilter.bt.util.FormatHTMLLayoutlog4j.rootCategory=WARN, CONSOLE, FILE.surfilter.bt=FATAL,TOFILElog4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.TOFILE.Threshold=FATALlog4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.htmllog4j.appender.TOFILE.Append=truelog4j.appender.TOFILE.ImmediateFlush=truelog4j.appender.TOFILE.DatePattern='.'yyyy-MM-dd'.html'yout=com.surfilter.bt.util.FormatHTMLLayout这里的com.surfilter.bt.util.FormatHTMLLayout是重写了log4j提供的HTMLLayout类,具体代码如下:Java代码import java.text.SimpleDateFormat;import java.util.Map;import org.apache.log4j.HTMLLayout;import yout;import org.apache.log4j.Level;import org.apache.log4j.helpers.Transform;import org.apache.log4j.spi.LocationInfo;import org.apache.log4j.spi.LoggingEvent;import com.opensymphony.xwork2.ActionContext;import com.surfilter.core.Constants;import er;public class FormatHTMLLayout extends HTMLLayout {public FormatHTMLLayout() {}protected final int BUF_SIZE = 256;protected final int MAX_CAPACITY = 1024;static String TRACE_PREFIX = "<br> ";// output buffer appended to when format() is invokedprivate StringBuffer sbuf = new StringBuffer(BUF_SIZE);String title="系统操作日志";/*** A string constant used in naming the option for setting the the HTML* document title. Current value of this string constant is <b>Title</b>.*/public static final String TITLE_OPTION = "Title";// Print no location info by defaultboolean locationInfo = true;public String format(LoggingEvent event) {if (sbuf.capacity() > MAX_CAPACITY) {sbuf = new StringBuffer(BUF_SIZE);} else {sbuf.setLength(0);}sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);/* sbuf.append("<td>");sbuf.append(String.valueOf(i));sbuf.append("</td>" + Layout.LINE_SEP);*/sbuf.append("<td>");sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newjava.util.Date()));sbuf.append("</td>" + Layout.LINE_SEP);/* String escapedThread = Transform.escapeTags(event.getThreadName());sbuf.append("<td title=\"" + escapedThread + " thread\">");sbuf.append(escapedThread);sbuf.append("</td>" + Layout.LINE_SEP);*/sbuf.append("<td title=\"级别\">");if (event.getLevel().equals(Level.FATAL)) {sbuf.append("<font color=\"#339933\">");sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));sbuf.append("</font>");} else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {sbuf.append("<font color=\"#993300\"><strong>");sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));sbuf.append("</strong></font>");} else {sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));}sbuf.append("</td>" + Layout.LINE_SEP);/* String escapedLogger = Transform.escapeTags(event.getLoggerName().substring(event.getLoggerName().lastIndexOf(".") ));sbuf.append("<td title=\"类名\">");sbuf.append(escapedLogger);sbuf.append("</td>" + Layout.LINE_SEP);*/if (locationInfo) {LocationInfo locInfo = event.getLocationInformation();sbuf.append("<td title=\"行号\">");sbuf.append(Transform.escapeTags(locInfo.getFileName()));sbuf.append(':');sbuf.append(locInfo.getLineNumber());sbuf.append("</td>" + Layout.LINE_SEP);}Map session = ActionContext.getContext().getSession();if(session!=null){User user = (User) session.get(ER_IN_SESSION);sbuf.append("<td>"+user.getName()+"</td>");}else{sbuf.append("<td> </td>");}sbuf.append("<td title=\"日志信息\">");sbuf.append(Transform.escapeTags(event.getRenderedMessage()));sbuf.append("</td>" + Layout.LINE_SEP);sbuf.append("</tr>" + Layout.LINE_SEP);if (event.getNDC() != null) {sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));sbuf.append("</td></tr>" + Layout.LINE_SEP);}String[] s = event.getThrowableStrRep();if (s != null) {sbuf.append("<tr><td bgcolor=\"#993300\" style=\"color:White; font-size : xx-small;\" colspan=\"4\">");appendThrowableAsHTML(s, sbuf);sbuf.append("</td></tr>" + Layout.LINE_SEP);}return sbuf.toString();}private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {if (s != null) {int len = s.length;if (len == 0)return;sbuf.append(Transform.escapeTags(s[0]));sbuf.append(Layout.LINE_SEP);for (int i = 1; i < len; i++) {sbuf.append(TRACE_PREFIX);sbuf.append(Transform.escapeTags(s[i]));sbuf.append(Layout.LINE_SEP);}}}/*** Returns appropriate HTML headers.*/public String getHeader() {StringBuffer sbuf = new StringBuffer();sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"/TR/html4/loose.dtd\">" + Layout.LINE_SEP);sbuf.append("<html>" + Layout.LINE_SEP);sbuf.append("<head>" + Layout.LINE_SEP);// sbuf.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">");sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);sbuf.append("<!--" + Layout.LINE_SEP);sbuf.append("body, table {font-family: '宋体',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);sbuf.append("-->" + Layout.LINE_SEP);sbuf.append("</style>" + Layout.LINE_SEP);sbuf.append("</head>" + Layout.LINE_SEP);sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);// sbuf.append("<hr size=\"1\" noshade>" + Layout.LINE_SEP);// sbuf.append("Log session start time " + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new java.util.Date()) + "<br>" + Layout.LINE_SEP);// sbuf.append("<p>" + Layout.LINE_SEP);sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);sbuf.append("<tr>" + Layout.LINE_SEP);// sbuf.append("<th>序列</th>" + Layout.LINE_SEP);sbuf.append("<th>执行时间</th>" + Layout.LINE_SEP);sbuf.append("<th>级别</th>" + Layout.LINE_SEP);// sbuf.append("<th>所在类</th>" + Layout.LINE_SEP);if (locationInfo) {sbuf.append("<th>所在行</th>" + Layout.LINE_SEP);}sbuf.append("<th>操作人</th>");sbuf.append("<th>信息</th>" + Layout.LINE_SEP);sbuf.append("</tr>" + Layout.LINE_SEP);sbuf.append("<br></br>" + Layout.LINE_SEP);return sbuf.toString();}}import java.text.SimpleDateFormat;import java.util.Map;import org.apache.log4j.HTMLLayout;import yout;import org.apache.log4j.Level;import org.apache.log4j.helpers.Transform;import org.apache.log4j.spi.LocationInfo;import org.apache.log4j.spi.LoggingEvent;import com.opensymphony.xwork2.ActionContext;import com.surfilter.core.Constants;import er;public class FormatHTMLLayout extends HTMLLayout {public FormatHTMLLayout() {}protected final int BUF_SIZE = 256;protected final int MAX_CAPACITY = 1024;static String TRACE_PREFIX = "<br> ";// output buffer appended to when format() is invokedprivate StringBuffer sbuf = new StringBuffer(BUF_SIZE);String title="系统操作日志";/*** A string constant used in naming the option for setting the the HTML * document title. Current value of this string constant is <b>Title</b>.*/public static final String TITLE_OPTION = "Title";// Print no location info by defaultboolean locationInfo = true;public String format(LoggingEvent event) {if (sbuf.capacity() > MAX_CAPACITY) {sbuf = new StringBuffer(BUF_SIZE);} else {sbuf.setLength(0);}sbuf.append(Layout.LINE_SEP + "<tr>" + Layout.LINE_SEP);/* sbuf.append("<td>");sbuf.append(String.valueOf(i));sbuf.append("</td>" + Layout.LINE_SEP);*/sbuf.append("<td>");sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));sbuf.append("</td>" + Layout.LINE_SEP);/* String escapedThread = Transform.escapeTags(event.getThreadName());sbuf.append("<td title=\"" + escapedThread + " thread\">");sbuf.append(escapedThread);sbuf.append("</td>" + Layout.LINE_SEP);*/sbuf.append("<td title=\"级别\">");if (event.getLevel().equals(Level.FATAL)) {sbuf.append("<font color=\"#339933\">");sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));sbuf.append("</font>");} else if (event.getLevel().isGreaterOrEqual(Level.WARN)) {sbuf.append("<font color=\"#993300\"><strong>");sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));sbuf.append("</strong></font>");} else {sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel())));}sbuf.append("</td>" + Layout.LINE_SEP);/* String escapedLogger = Transform.escapeTags(event.getLoggerName().substring(event.getLoggerName().lastIndexOf(".") ));sbuf.append("<td title=\"类名\">");sbuf.append(escapedLogger);sbuf.append("</td>" + Layout.LINE_SEP);*/if (locationInfo) {LocationInfo locInfo = event.getLocationInformation();sbuf.append("<td title=\"行号\">");sbuf.append(Transform.escapeTags(locInfo.getFileName()));sbuf.append(':');sbuf.append(locInfo.getLineNumber());sbuf.append("</td>" + Layout.LINE_SEP);}Map session = ActionContext.getContext().getSession();if(session!=null){User user = (User) session.get(ER_IN_SESSION);sbuf.append("<td>"+user.getName()+"</td>");}else{sbuf.append("<td> </td>");}sbuf.append("<td title=\"日志信息\">");sbuf.append(Transform.escapeTags(event.getRenderedMessage()));sbuf.append("</td>" + Layout.LINE_SEP);sbuf.append("</tr>" + Layout.LINE_SEP);if (event.getNDC() != null) {sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));sbuf.append("</td></tr>" + Layout.LINE_SEP);}String[] s = event.getThrowableStrRep();if (s != null) {sbuf.append("<tr><td bgcolor=\"#993300\" style=\"color:White; font-size : xx-small;\" colspan=\"4\">");appendThrowableAsHTML(s, sbuf);sbuf.append("</td></tr>" + Layout.LINE_SEP);}return sbuf.toString();}private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {if (s != null) {int len = s.length;if (len == 0)return;sbuf.append(Transform.escapeTags(s[0]));sbuf.append(Layout.LINE_SEP);for (int i = 1; i < len; i++) {sbuf.append(TRACE_PREFIX);sbuf.append(Transform.escapeTags(s[i]));sbuf.append(Layout.LINE_SEP);}}}/*** Returns appropriate HTML headers.*/public String getHeader() {StringBuffer sbuf = new StringBuffer();sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"/TR/html4/loose.dtd\">" + Layout.LINE_SEP);sbuf.append("<html>" + Layout.LINE_SEP);sbuf.append("<head>" + Layout.LINE_SEP);// sbuf.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">");sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);sbuf.append("<!--" + Layout.LINE_SEP);sbuf.append("body, table {font-family: '宋体',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);sbuf.append("th {background: #336699; color: #FFFFFF; text-align: left;}" + Layout.LINE_SEP);sbuf.append("-->" + Layout.LINE_SEP);sbuf.append("</style>" + Layout.LINE_SEP);sbuf.append("</head>" + Layout.LINE_SEP);sbuf.append("<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);// sbuf.append("<hr size=\"1\" noshade>" + Layout.LINE_SEP);// sbuf.append("Log session start time " + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new java.util.Date()) + "<br>" + Layout.LINE_SEP);// sbuf.append("<p>" + Layout.LINE_SEP);sbuf.append("<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);sbuf.append("<tr>" + Layout.LINE_SEP);// sbuf.append("<th>序列</th>" + Layout.LINE_SEP);sbuf.append("<th>执行时间</th>" + Layout.LINE_SEP);sbuf.append("<th>级别</th>" + Layout.LINE_SEP);// sbuf.append("<th>所在类</th>" + Layout.LINE_SEP);if (locationInfo) {sbuf.append("<th>所在行</th>" + Layout.LINE_SEP);}sbuf.append("<th>操作人</th>");sbuf.append("<th>信息</th>" + Layout.LINE_SEP);sbuf.append("</tr>" + Layout.LINE_SEP);sbuf.append("<br></br>" + Layout.LINE_SEP);return sbuf.toString();}}注,上面输出里包含了从当前session里取到的用户信息,只需要重写getHeader,format,appendThrowableAsHTML三个方法就可以了。
测试错误ERRORStatusLoggerNolog4j2configurationfil。。。
测试错误ERRORStatusLoggerNolog4j2configurationfil。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.错误:状态记录器没有找到log4j2配置⽂件,将使⽤默认配置:只将错误记录到控制台。
原因:log4j2的jar包是hibernate5框架⾃带的log4j2,在ssh中即使⾃⼰导⼊了第三⽅⽇志包,系统依然会调⽤log4j2,缺省默认配置⽂件log4j2.xml解决:增加配置⽂件 log4j2.xml<?xml version="1.0" encoding="UTF-8"?><Configuration status="warn"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%m%n"/></Console></Appenders><Loggers><Root level="INFO"><AppenderRef ref="Console"/></Root></Loggers></Configuration>配置log4j2后hibernate会向控制台输出更加清晰的信息,当设置成status="warn",你会看到log4j2内部各种详细输出。
springboot项目配置logback日志系统的实现
springboot项⽬配置logback⽇志系统的实现记录springboot项⽬配置logback⽇志⽂件管理:logback依赖jar包SpringBoot项⽬配置logback理论上需要添加logback-classic依赖jar包:<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>但是因为SpringBoot项⽬默认就是使⽤的就是logback⽇志系统,创建SpringBoot项⽬时引⼊的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,⾥⾯同时包含多种⽇志系统依赖,如下图所⽰:包括logback和log4j,所以,⽆需额外添加依赖,直接配置logback.xml就可以了。
此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot⾃带的commons‐logging,然后在引⼊log4j2的依赖jar包,如下所⽰:<!--排除 commons‐logging--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>commons‐logging</groupId><artifactId>commons‐logging</artifactId></exclusion></exclusions></dependency><!--引⼊log4j2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>logback的默认配置前⾯说到SpringBoot项⽬默认使⽤logback,那么对于logback的配置情况,SpringBoot⼜是如何定义的呢?⾸先,SpringBoot会从resource包下查找logback-test.xml或logback.xml,如果这两个都不存在,则会调⽤BasicConfigurator,创建⼀个最⼩化的基本配置。
HttpSessionListener、ServletContextListener
关于Listener详解ServletContextListenerServletContextListener接口能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。
当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理。
在ServletContextListener接口中定义了处理ServletContextEvent事件的两个方法:contextInitialized (ServletContextEvent event)当Servlet容器启动Web应用时调用该方法。
在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。
用途:Web服务器启动时加载数据到内存中………….. contextDestroyed(ServletContextEvent event)当Servlet容器终止Web应用时调用该方法。
在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。
public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象HttpSessionListenerSession创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。
对Session的整体状态的监听。
对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession 对象。
当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。
mybatis properties文件配置打印sql语句
mybatis properties文件配置打印sql语句在MyBatis中,可以通过配置文件来控制是否打印SQL 语句。
通常,这个配置文件是mybatis-config.xml。
要开启SQL语句的打印,你需要在<settings>标签中添加以下配置:xml复制代码:<settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>这样,MyBatis就会使用STDOUT_LOGGING日志实现,将SQL语句打印到控制台。
如果你使用的是MyBatis 3.5及以上版本,也可以使用LOG4J_LOGGING或者SLF4J_LOGGING来实现:xml复制代码:<settings><setting name="logImpl" value="LOG4J_LOGGING"/></settings>或者:xml复制代码:<settings><setting name="logImpl" value="SLF4J_LOGGING"/></settings>然后,你需要在你的项目中添加对应的日志依赖,比如如果你选择的是Log4j,你需要在你的pom.xml中添加如下依赖:xml复制代码:<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>注意:打印SQL语句可能会暴露你的数据库结构或者数据,所以请谨慎使用。
log4j2RollingRandomAccessFile配置过程
log4j2RollingRandomAccessFile配置过程log4j2 RollingRandomAccessFile配置⼀、需求背景1. ⽇志按⼩时压缩成zip⽂件。
2. 仅保存距离当前时间最近24⼩时的历史压缩⽂件。
3. 压缩封存的zip⽂件,按照零点为参考点纠偏。
4. 将com.roadway.acceptor.base.DebugUtils类的⽇志输出到指定⽂件,且不再输出到其他⽂件。
⼆、log4j2 配置实现<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO" monitorInterval="120"><properties><property name="MSG_LOG_HOME">/data/gpslog</property></properties><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d [%t] %-5p [%c] - %m%n" /></Console><RollingRandomAccessFile name="msgAppender" immediateFlush="true"fileName="${MSG_LOG_HOME}/msg.log"filePattern="${MSG_LOG_HOME}/backup/msg.%d{yyyyMMddHH}.zip"><Filters><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters><PatternLayout pattern="%m%n" /><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/></Policies><DefaultRolloverStrategy max="24"><Delete basePath="${MSG_LOG_HOME}" maxDepth="2"><IfFileName glob="*/msg.*.zip" /><IfLastModified age="24H" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile></Appenders><Loggers><AsyncLogger name="com.roadway.DebugUtils" additivity="FALSE" level="INFO"><appender-ref ref="msgAppender" /></AsyncLogger></Loggers></Configuration>三、配置说明1. monitorInterval,博客配置的为120,单位为秒。
Bonecp参数配置
一、BoneCP配置文件格式(bonecp-config.xml):Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<bonecp-config>3.<default-config>4. <!-- ... -->5.<property name="...">...</property>6.</default-config>7.</bonecp-config>二、BoneCP主要配置参数1.jdbcUrl设置数据库URLername设置数据库用户名3.password设置数据库密码4.partitionCount设置分区个数。
这个参数默认为1,建议3-4(根据特定应用程序而定)。
为了减少锁竞争和改善性能,从当前线程分区(thread-affinity)中获取一个connection,也就是这个样子:partitions[Thread.currentThread().getId() % partitionCount]。
当拥有充足的短期(short-lived)的线程时候,这个参数设置越大,性能越好。
当超过一定的阀值时,连接池的维护工作就可能对性能造成一定的负面影响(仅当分区上的connection使用耗尽时)。
5.maxConnectionsPerPartition设置每个分区含有connection最大个数。
这个参数默认为2。
如果小于2,BoneCP 将设置为50。
比如:partitionCount设置为3,maxConnectionPerPartition设置为5,你就会拥有总共15个connection。
注意:BoneCP不会将这些connection一起创建出来,而是说在需要更多connection的时候从minConnectionsPerPartition参数开始逐步地增长connection数量。
SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)
SpringBoot项⽬的logback⽇志配置(包括打印mybatis的sql语句)关于logback⽇志的详解见这位仁兄的博客:我在这就开门见⼭直接介绍我们项⽬⽇志的配置使⽤吧!~1、基本介绍默认情况下,Spring Boot项⽬就会⽤Logback来记录⽇志,并⽤INFO级别输出到控制台。
如下图:实际开发中我们不需要直接添加logback⽇志依赖。
你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的⽇志框架 logback。
⽇志级别从低到⾼分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL只能展⽰⼤于或等于设置的⽇志级别的⽇志;也就是说springboot默认级别为INFO,那么在控制台展⽰的⽇志级别只有INFO 、WARN、ERROR、FATAL2、logback.xml⽇志⽂件配置根据不同的⽇志系统,你可以按如下规则组织配置⽂件名,就能被正确加载:Logback:logback-spring.xml,logback-spring.groovy, logback.xml, logback.groovyLog4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xmlLog4j2:log4j2-spring.xml, log4j2.xmlJDK (Java Util Logging):logging.propertiesSpring Boot官⽅推荐优先使⽤带有-spring的⽂件名作为你的⽇志配置(如使⽤logback-spring.xml,⽽不是logback.xml),命名为logback-spring.xml的⽇志配置⽂件,spring boot可以为它添加⼀些spring boot特有的配置项(下⾯会提到)。
使用Log4j2,打包后提示ERRORStatusLoggerLog4j2couldnot。。。
使⽤Log4j2,打包后提⽰ERRORStatusLoggerLog4j2couldnot。
从Log4j切换到Log4j2,没有打包之前⽇志输出正常,但是打包后总是提⽰下⾯内容:错误⼀:ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...错误⼆:ERROR StatusLogger LogManager returned an instance of org.apache.logging.log4j.simple.SimpleLoggerContextFactory which does not implementorg.apache.logging.log4j.core.impl.Log4jContextFactory. Unable to initialize Log4j.被这个问题折腾了⼀天多,总算是找到⼀个解决办法,在这⾥记录⼀下。
错误⼀:⽹上有⼈说是没有导⼊log4j-core,但是导⼊后还是出现这个错误。
这⾥还尝试了添加启动参数(-Dlog4j.configurationFile=log4j2.xml),以及在src下添加ponent.properties⽂件(内容:log4j.configurationFile=log4j2.xml),结果同样失败。
错误⼆:这个问题在⽹上没有多少可以参考的信息,但是在解决错误⼀时,看到有ponent.properties这个配置⽂件,所以抱着试试的态度,到官⽅上查了⼀下,有这样的内容:然后果断在src下添加ponent.properties⽂件(内容:log4j2.loggerContextFactory=org.apache.logging.log4j.core.impl.Log4jContextFactory),接着打包运⾏,⽇志正常输出了。
