【IT专家】Log4j关闭Spring和Hibernate日志打印
- 格式:pdf
- 大小:108.19 KB
- 文档页数:1
log4j的使用方法log4j的使用方法什么是log4jlog4j是一个使用Java编写的开源日志记录工具。
它允许开发人员在程序中进行灵活的日志记录,帮助定位和修复应用程序的错误和问题。
log4j通过配置文件确定日志记录的级别和输出方式,提供了丰富的功能和灵活性。
log4j的基本配置1.导入log4j的依赖库:添加以下依赖到你的项目中的``文件中:<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version></version></dependency>2.创建log4j的配置文件:在项目的资源目录下创建一个名为``的文件,并添加以下内容:# 设置日志输出到控制台=INFO, stdout# stdout将日志输出到控制台====%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n以上配置将日志记录级别设为INFO,并将日志输出到控制台。
3.初始化log4j:在你的应用程序入口处(比如main方法),添加以下代码进行log4j的初始化:import ;public class MyApp {public static void main(String[] args) {// 加载log4j的配置文件("");// 其他应用程序代码...}}log4j的日志级别与日志输出log4j提供了不同的日志级别,根据不同的需求可以进行设置。
1.日志级别:–TRACE:最详细的日志级别,常用于调试信息。
–DEBUG:用于调试和开发阶段的详细信息。
–INFO:提供程序的运行状态信息以及其他关键事件。
–WARN:表明潜在的问题,但程序仍能正常运行。
–ERROR:用于记录错误事件,但仍可继续执行。
–FATAL:严重错误,可能导致程序终止执行。
Log4j配置最全说明1. log4j 的配置文件Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是Java 特性文件 lg4j.properties (键 = 值)。
1.1. log4j configuration scripts in properties formatlg4j.properties 文件作为作为常用的配置文件的方法如下:配置根 LoggerLogger 负责处理日志记录的大部分操作。
其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, … 其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、WARN 、 INFO 、 DEBUG 、 ALL 或者自定义的级别。
Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR 、 WARN 、INFO 、 DEBUG 。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了 INFO 级别,只有等于及高于这个级别的才进行处理,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。
ALL: 打印所有的日志, OFF :关闭所有的日志输出。
appenderName 就是指定日志信息输出到哪个地方。
可同时指定多个输出目的地。
Appender配置日志信息输出目的地 Appender 负责控制日志记录操作的输出。
其语法为:log4j.appender.appenderName =.of.appender.classlog4j.appender.appenderName.option1 = value1log4j.appender.appenderName.optionN = valueN其中, Log4j 提供的 appender 有以下几种:org.apache.log4j.ConsoleAppender (控制台),org.apache.log4j.FileAppender (文件),org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB 设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。
使⽤log4j2打印Log,log4j不能打印⽇志信息,log4j2不能打印⽇志信息,lo。
说来惭愧,今天就写了个"hello world",了解了⼀下log4j的⽇志。
本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使⽤,log4j配置⽂件开始⽤的log4j.properties,结果控制台⼀直打印ERROR StatusLogger No log4j2 configuration file found.也就是Log4j2配置⽂件没找到的意思。
我就把log4j.properties⽂件名改成log4j2.properties,结果不报错了,但是就是不打印⽇志,直接就结束运⾏了(Process finished with exit code 0),现在想想好愚蠢啊。
后来经过百般折腾,发现log4j是log4j,log4j2是log4j2,不能混⽤啊,但它们都是出⾃同⼀个公司,log4j2顾名思义是第⼆代,是log4j的优化升级版。
log4j的配置⽂件是log4j.properties,是以.properties后缀名结尾的⽂件命名,⽽log4j2的配置⽂件⼀般是xml⽂件或json,以.xml或.json 后缀格式的命名,log4j更新到1.2.17版就停⽌了更新,发布了Log4j2; 我加⼊的jar包⼀直是log4j2的jar包,开始使⽤了log4j的配置⽂件(log4j.properties),所以⼀直打印不出来。
后来重新加⼊配置⽂件log4j2.xml后,就可以打印了。
maven的pom.xml⽂件中加⼊的依赖:加⼊log4j的实现和log4j核⼼包,如果版本号(version)在2.0以下,配置⽂件就是.properties了哦<!-- https:///artifact/org.apache.logging.log4j/log4j-slf4j-impl --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.6.2</version></dependency><!-- https:///artifact/org.apache.logging.log4j/log4j-core --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.6.2</version></dependency> 如果是springboot项⽬:需要排除⼀个logback的jar包,以免冲突: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><!--log4j-slf4j-impl与 logback-classic包不兼容,删除这个包 --><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></exclusion></exclusions></dependency> log4j2.xml⽂件:⽹上复制的⼀个,写的挺全,由于我只⽤到在控制台打印输出,所以我把没⽤到的都注释了。
Java开发日志分析工具Log4j使用详解Log4j是一个用于记录应用程序运行时日志的Java开发工具。
它可以帮助开发人员更好地理解和监控应用程序的运行状态,以及解决潜在的问题。
下面将详细介绍Log4j的使用方法和功能。
一、Log4j的配置文件Log4j使用一个名为log4j.properties的配置文件来定义日志的输出格式、日志级别、输出目标等。
这个配置文件需要放在应用程序的classpath下,以便Log4j能够找到它并加载配置。
配置文件中的每一个配置项都有一个特定的名称和对应的值。
例如,可以使用"log4j.rootLogger"配置项来设置根日志记录器的级别,使用"log4j.appender.console"配置项来设置控制台输出的格式等。
二、Log4j的日志级别Log4j提供了多个日志级别,用于控制日志的输出。
这些日志级别按照严重程度递增,包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL。
可以通过配置文件中的"log4j.rootLogger"配置项来设置根日志记录器的级别,从而决定哪些级别的日志会被记录。
三、Log4j的输出目标Log4j可以将日志输出到不同的目标,包括控制台、文件、数据库等。
可以通过配置文件中的"log4j.appender"配置项来设置输出目标。
常用的输出目标有:1. ConsoleAppender:将日志输出到控制台。
2. FileAppender:将日志输出到文件。
3. RollingFileAppender:将日志输出到滚动文件,可以设置文件的大小和数量,以便自动滚动日志文件。
4. JDBCAppender:将日志输出到数据库。
四、Log4j的日志格式Log4j可以自定义日志的输出格式。
可以通过配置文件中的"log4j.appender"配置项来设置输出格式。
Log4j 使用参考规范目录简介 (3)1. 概述 (3)2. 库主件 (3)3. 主要组件 (3)配置 (4)1. 相关配置文件 (4)2. 详细配置说明 (5)3. 输出方式 (5)4. 输出格式 (6)调用 (7)注意问题 (7)参考文档 (8)1. 概述程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。
例如,跟踪语句(trace),结构转储和常见的System.out.println或printf调试语句。
log4j 提供分级方法在程序中嵌入日志记录语句。
日志信息具有多种输出格式和多个输出级别。
使用一个专门的日志记录包,可以减轻对成千上万的System.out.println 语句的维护成本,因为日志记录可以通过配置脚本在运行时得以控制。
log4j 维护嵌入在程序代码中的日志记录语句。
通过规范日志记录的处理过程,一些人认为应该鼓励更多的使用日志记录并且获得更高程度的效率。
五级输出,依次为DEBUG、INFO、WARN、ERROR、FATAL。
使用者可根据不同的需求,设定不同的输出级别,则得到不同级别的输出结果。
(在正式生产环境中,一般设定为 warn)2. 库主件目前log4j 2.0 版本需要JAVA5(logging services designed for Java 5 and later);1.3 版不被推荐使用,我们使用的最多的是1.2版。
目前可download 的是1.2.17 版。
下载地址:/dyn/closer.cgi/logging/log4j/库文件一般为名为log4j.jar, 使用时加入lib路径下。
3. 主要组件Log4j有三个主要组件:loggers、appenders和layouts。
这三个组件协同工作,使开发人员能够根据消息类型和级别来记录消息,并且在程序运行期控制消息的输出格式位置。
Logger:记录器;Logger 负责处理日志记录的大部分操作。
logback日志,及log4jdbc记录数据库日志--步骤这两天一直在研究logback日志记录,比我以前用的log4j的日志记录貌似更简单,更容易使用了。
所以决定了解一下logback,并将其使用在charm项目上。
之前两天一直都在弄这个logback日志。
但总是失败,很简单的jar包导进去了,测试文件写好了,但就是打印不出来日志。
还有一个更怪的问题。
日志文件夹和日志文件都给我创建出来了,但就是不能打印日志,控制台也不能够输出。
当时我用日志jar 包是:logback-access-0.9.14.jar logback-classic-0.9.14.jar logback-core-0.9.14.jar slf4j-api-1.5.6.jar 。
后来,换了几个jar包,就好使。
我之前在网上查过,logback的jar和slf4j-api的jar是要匹配的。
难道是这几个不匹配?可能是。
下面我们来看看好用的jar包:logback-classic-1.0.13.jar,logback-core-1.0.13.jar,slf4j-api-1.7.5.jar,这三个就足够了,具体可以看看/haidage/article/details/6794509,每一个节点都是什么含义。
====================================== =======================下面来描述下如何配置logback日志:1. 导入所需jar包:logback-classic-1.0.13.jar,logback-core-1.0.13.jar,slf4j-api-1.7.5.jar。
2. 写配置文件:logback.xml,放在根目录src下或者classpath 下。
logback.xml____________________________________________________logback.xml的源码文件在本片文章的最后,可以借鉴参考.第三步:编写测试文件。
log4j输出多个自定义日志文件log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。
先看一个常见的log4j.properties文件,它是在控制台和myweb.log文件中记录日志:log4j.rootLogger=DEBUG, stdout, logfile.springframework=ERROR.apache=INFOlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.loglog4j.appender.logfile.MaxFileSize=512KBlog4j.appender.logfile.MaxBackupIndex=5yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n如果想对不同的类输出不同的文件(以.Test为例),先要在Test.java中定义:private static Log logger = LogFactory.getLog(Test.class);然后在log4j.properties中加入:.Test= DEBUG, testlog4j.appender.test=org.apache.log4j.FileAppenderlog4j.appender.test.File=${myweb.root}/WEB-INF/log/test.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n也就是让.Test中的logger使用log4j.appender.test所做的配置。
Log4j笔记●为什么要使用日志⏹开发阶段可以发现程序的问题,排错⏹产品阶段可以记录程序运行的状况⏹Log4j就是一个简便的日志管理工具●System.out.println()的问题⏹不能在运行过程中打开或者关闭⏹不能有针对性地选择⏹输出的信息没有分级⏹只能输出文本信息⏹不能改变输出的位置Log4j可以解决以上的所有问题●log4j简介⏹是最流行的Java日志处理框架⏹Apache的子项目⏹开源●log4j的使用⏹需要从Apache官方网站上下载jar包⏹添加到项目的Build Path里⏹使用示例运行这个程序,需要log4j.properties文件warn是指输出的日志级别;大于等于这个级别的输出才会执行,小于此级别的不会输出;级别有8种,名称固定Console:输出的位置或者目的地,这个名字是别名,可以任意起名字在第二行针对这个目的地进行设置如果上面叫aaa第二行就是log4j.appender.aaa第三行可以设置输出目的地的一些配置信息,最常用的是输出的布局格式对于输出到文件,还需要在这个位置指定文件的路径log4j的核心●Logger完成日志信息的处理,可以定义输出的层次和决定信息是否输出输出的优先级顺序:ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFFALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF●Appender设置日志信息的去向,可以同时指定多个目的地。
log4j.appender.appenderName=Appender.classlog4j.appender.appenderName.optiona1=value1…log4j.appender.appenderName.optionaN=valueN常用的有如下:org.apache.log4j.ConsoleAppender 控制台org.apache.log4j.FileAppender 文件org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件org.apache.log4j.RollingFileAppender 文件尺寸到一定大小产生新文件org.apache.log4j.WriterAppender 将日志以流的方式发送org.apache.log4j.JdbcAppender 将日志保存到数据库●Layout设置日志信息的输出样式配置格式:yout=Layout.classyout.option=value常用:org.apache.log4j.HTMLLayout 以HTML表格形式布局org.apache.log4j.SimpleLLayout 包含日志级别和信息字符串org.apache.log4j.TTCCLayout 包含日志产生的时间,执行者,类别等org.apache.log4j.PatternLayout 灵活指定%p 输出优先级%r 输出自应用启动到输出信息所耗费的毫秒数%t 输出产生该日志事件的线程名%f 输出所属类名%c 输出类的全名称%d 输出日志产生时间或者日前,后面用{yyyy-MM-dd HH-mm-ss}指定%l 输出所处行号%m 具体信息%n 换行●配置文件⏹log4j.propertieslog4j.rootLogger=级别,去向。
浅谈JAVA中的日志文件log4的使用方法:log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测有两种配置方式:一种程序配置,一种文件配置有三个主要单元要了解,Logger,appender,layout.logger是进行记录的主要类,appender是记录的方式,layout是记录的格式logger七种日志级别:debug,info,warn,error,fatal,all,off最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用appender主要分三类,终端输出,文件输出,流输出ConsoleAppenderFileAppenderWriterAppenderlayout也分三类:简单格式,html格式,匹配格式SimpleLayoutHTMLLayoutPatternLayout输出简写:(用在PatternLayout)%m 输出代码中指定的消息%p 输出优先级%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
一般使用了它就不需使用%c了[按照下面步骤来写吧!就可以得到我们所想要的日志文件哦!][按照顺序就可以将日志文件读出来了!]作用实例:程序配置一般过程:1.得到特定名称的logger2.得到其中一个layout3.根据layout得到appender4.logger添加appender5.logger设置级别6.logger输出有级别的日志信息程序:Logger logger = Logger.getLogger(Test.class.getName()) //取得loggerSimpleLayout simpleLayut = new SimpleLayout() //取得layoutFileAppender fa = new FileAppender(simpleLayout,"test.log") //取得ppenderlogger.addAppender(fa) //添加appenderlogger.set((Level)Level.DEBUG) //设置级别logger.debug("hihihihih") //记录信息文件配置过程:1.得到特定名称的logger2.加载配置文件 (配置文件做了2-5的工作)3.logger输出有级别的日志信息文件配置程序:1.Logger logger = Logger.getLogger(Test.class.getName()) //取得logger2.使用下面的配置加载3.输出信息文件配置分properties,xml读取properties:PropertyConfigurator.configure("logTest.properties");读取xml:DOMConfigurator.configure("src/logTest.xml");告别System.out.print()—J2SDK1.4新增Java日志框架(一)作为一名Java程序员,最熟悉的、使用最多的调用恐怕莫过于System.out.print(“…”)。
Java编码常见的Log⽇志打印问题前⾔本⽂总结了作者在Java代码检视中遇到的⼀些关于⽇志打印的问题,并给出修改建议。
因能⼒有限,难免存在错漏,欢迎指正。
⼀. 不规范的异常打印使⽤slf4j⽇志组件时,logger.error(与log.warn)接受Throwable参数,以打印异常名和详细的堆栈信息(可能内部调⽤e.printStackTrace())。
但书写打印语句时,需要注意格式。
例如:1 logger.error("Best print: ", e);2 logger.error("Good print: {}", e); //a.3 logger.error("Bad print: " + e); //b. 或 + e.toString()4 logger.error("Bad print: " + e.getMessage()); //c. 或: {}", e.getMessage())a句仍可打印异常名和堆栈信息,但多输出⼀对花括号"{}";b句仅打印异常名;c句打印异常消息字符串。
以空指针异常(Runtime异常)为例,b句打印"ng.NullPointerException",c句打印"null"(过于简陋)。
可使⽤如下正则表达式排查Java代码⾥不规范的异常打印:^\s*[Ll][Oo][Gg](ger|GER)*\.(error|warn)\("(.+?)"\s*\+\s*(e|ex|e.getMessage\(\))\s*\);.*该正则表达式可排查出形如上⽂b、c句的打印缺陷。
考虑到实际代码书写风格的差异,会存在少量的漏判和误判。
此外应注意,某些异常(如SQL或IO异常)可能泄露敏感信息,打印异常堆栈之前应根据⽹络安全要求做必要的”加⼯”。
Java日志框架对比:Log4j、Logback和SLF4J的选择引言:在开发Java应用程序时,日志是一个非常重要的组成部分。
它可以帮助我们记录应用程序的运行状态、调试问题以及监控系统性能。
为了更好地管理和利用日志信息,我们需要选择一个适合的日志框架。
本文将对比三个流行的Java日志框架:Log4j、Logback和SLF4J,帮助读者了解它们的特点和适用场景,以便做出正确的选择。
一、Log4jLog4j是一个广泛使用的Java日志框架,它提供了强大的日志记录功能和灵活的配置选项。
Log4j具有以下几个主要特点:1. 简单易用:Log4j的API设计简单直观,容易上手。
开发人员可以通过几行代码快速集成Log4j到应用程序中,并开始记录日志。
2. 高度可配置:Log4j提供了丰富的配置选项,可以根据需求灵活地配置日志输出格式、日志级别、目标设备等。
这使得开发人员可以根据具体需求进行精细化的日志管理。
3. 强大的过滤器机制:Log4j支持多种过滤器,可以根据日志的级别、来源、内容等进行过滤,从而实现对日志信息的精确控制。
4. 多种输出方式:Log4j支持将日志输出到控制台、文件、数据库等多种目标设备,开发人员可以根据实际需求选择合适的输出方式。
尽管Log4j在过去是Java日志领域的翘楚,但它的维护和更新已经相对较少。
因此,随着时间的推移,Log4j的性能和功能可能无法满足现代应用程序的需求。
二、LogbackLogback是由Log4j的创始人开发的下一代Java日志框架,它在Log4j的基础上进行了改进和优化。
Logback具有以下几个主要特点:1. 高性能:相比于Log4j,Logback在性能上有了显著提升。
它通过精细的设计和优化,可以更高效地处理日志记录,减少对应用程序性能的影响。
2. 灵活的配置:Logback提供了与Log4j相似的配置选项,可以根据需要自定义日志输出格式、级别、目标设备等。
Hibernate打印SQL及附加参数(log4j配置)在Hibernate的配置文件hibernate.cfg.xml中有3个设置项跟显示SQL语句相关,他们的值都是boolean值:1、show_sql:是否显示SQL语句2、format_sql: 是否格式化输出字符串,增强SQL的可读性3、use_sql_comments:是否显示注释,用于指示出是什么操作产生了这个SQL语句。
如果设置了show_sql=true的话默认只打印SQL语句不会打印参数:如果需要打印参数请在log4j配置文件:log4j.properties中加入:.hibernate.type.descriptor.sql.BasicBinder=T RACElog4j.loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE如果需要查看查询中命名参数的值,继续加入:.hibernate.engine.QueryParameters=DEB UG.hibernate.engine.query.HQLQueryPlan= DEBUG接下来奉上全部配置:log4j.rootLogger=info, CA# ConsoleAppenderlog4j.appender.CA=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{hh\:m m\:ss,SSS} [%t] %-5p %c %x - %m%n#为了显示参数.hibernate.type.descriptor.sql.BasicBinde r=TRACElog4j.loggerorg.hibernate.type.descriptor.sql.BasicExtrac tor=TRACE#查看查询中命名参数的值.hibernate.engine.QueryParameters=DEB UG.hibernate.engine.query.HQLQueryPlan= DEBUG使用时只需要将hibernate.cfg.xml中的show_sql设置为true然后将红色代码复制到配置文件中即可。
在开发中打印内容,使用System.out.println() 和Log4j 应当是人人皆知的方法了。
其实在开发中我们不建议使用System.out 因为大量的使用System.out 会增加资源的消耗。
而Log4j 更为灵活在性能上也相比System.out 要高,我们可以配置输出级别,可以指定多个日志文件分别记录不同的日志。
使用System.out 是在当前线程执行的,写入文件也是写入完毕后才继续执行下面的程序。
而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。
如非必要,建议大家不要使用控制台输出,因为控制台输出没有优先级会显得输出太乱。
个人推荐使用SLF4J(Simple Logging Facade For Java)的logback来输出日志,其比log4j 要好,因为他效率更高。
spring Boot 提供了一套日志系统,logback是最优先的选择。
配置了logback.xml可以利用Spring Boot提供的默认日志配置:详解Spring Boot实现日志记录SLF4J。
(转)灵活控制Hibernate的⽇志或SQL输出,以便于诊断背景:项⽬开发需要。
之前对于hibernate⽇志输出,log4j的绑定,之间的关系⼀直不是很清楚。
终于找到⼀篇介绍的很详细的⽂章。
⽂章出处:hibernate配置我们在使⽤ Hibernate 时⼀般只会关注是否显⽰⽣成的 SQL 语句,不过有些时候还不够。
默认时 Hibernate 执⾏的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或是 Log4Back,还能显⽰出更详细的参数和取值信息。
这⾥简单讲来。
Hibernate 的配置⽂件hibernate.cfg.xml ⾥提供有三个有关显⽰ SQL 的配置项,如果是与 Spring 联合,也可以配置到 Spring 的配置中。
它们的取值是 boolean 值。
1) hibernate.show_sql - 是否显⽰所⽣成 SQL 语句,我们最常和它打交道2) hibernate.format_sql - 是否格式化⽣成的 SQL 语句,增加可读性,不然全挤在⼀⾏3) e_sql_comments - 是否显⽰注释,⽤以指出什么操作产⽣的 SQL 语句,相⽐上⾯两条⽽⾔,这个配置会稍稍陌⽣些与spring联合配置spring-config.xml:<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mappingLocations"><list><value>classpath:szfs/tms/service/manage/conf/hbm/*/*.hbm.xml</value><value>classpath:szfs/tms/service/manage/conf/hbm/*.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop><!-- <prop key="hibernate.show_sql">true</prop> --><prop key="hibernate.format_sql">true</prop><prop key="hibernate.query.substitutions">${hibernate.query.substitutions}</prop><prop key="hibernate.default_batch_fetch_size">${hibernate.default_batch_fetch_size}</prop><prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop><prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop><prop key="e_reflection_optimizer">${e_reflection_optimizer}</prop><prop key="e_second_level_cache">${e_second_level_cache}</prop><prop key="e_query_cache">${e_query_cache}</prop><prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop><prop key="net.sf.ehcache.configurationResourceName">${net.sf.ehcache.configurationResourceName}</prop><prop key="e_structured_entries">${e_structured_entries}</prop></props></property><property name="entityInterceptor"><bean id ="customNullsFirstInterceptor" class="szfs.tms.service.framework.interceptor.CustomNullsFirstInterceptor"/></property></bean>来看看加了上⾯三条配置后产⽣的效果,执⾏了 Hibernate 查询后,在控制台上产⽣如下输出:Hibernate:/* load collection cc.unmi.test.model.Post.securities */ selectsecurities0_.post_id as post1_7_1_,security1_.shareclassid as sharecla1_16_0_,security1_.company_id as company2_16_0_,fromPost_Security_Relationship securities0_inner joinunmi.securities security1_on securities0_.shareclassid=security1_.shareclassidwheresecurities0_.post_id=?hibernate.show_sql 控制全局是否显⽰⽣成的 SQL 语句,hibernate.format_sql 格式化后的效果如上,不然就是⼀⾏,⽽ e_sql_comments 输出的是红⾊的部分,表明是在加载securities 集合时所执⾏的 SQL 语句。
浅谈springboot集成log4j解决与logback冲突的问题现在很流⾏springboot的开发,⼩编闲来⽆事也学了学,开发过程中遇见了log4j⽇志的⼀个⼩⼩问题,特此记载。
⾸先在pox.xml中引⼊对应的maven依赖:<!-- 引⼊log4j--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId><version>1.3.8.RELEASE</version></dependency>然后在src/resources/下新建log4j.properties⽂件(摘抄⾃⽹上):log4j.rootLogger=info,error,CONSOLE,DEBUGlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n=info=org.apache.log4j.DailyRollingFileAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n.datePattern='.'yyyy-MM-dd.Threshold = info.append=true.File=d://springboot3/logs/api_services_info.loglog4j.logger.error=errorlog4j.appender.error=org.apache.log4j.DailyRollingFileAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%nlog4j.appender.error.datePattern='.'yyyy-MM-ddlog4j.appender.error.Threshold = errorlog4j.appender.error.append=truelog4j.appender.error.File=d://springboot3/logs/error/api_services_error.loglog4j.logger.DEBUG=DEBUGlog4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%nlog4j.appender.DEBUG.datePattern='.'yyyy-MM-ddlog4j.appender.DEBUG.Threshold = DEBUGlog4j.appender.DEBUG.append=truelog4j.appender.DEBUG.File=d://springboot3/logs/debug/api_services_debug.log在application.yml中加⼊如下配置:logging:config: src/main/resources/log4j.properties⾄此,log4j的配置完毕,启动项⽬,发现会报错:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/C:/Users/tony/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/C:/Users/tony/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See /codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]12:02:26.963 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : []12:02:26.969 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/, /spring-boot/target/classes/, /spring-boot-starter-[\w-]+/, /spri 12:02:26.969 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/F:/work_intel/code/demo1/target/classes/]Logging system failed to initialize using configuration from 'src/main/resources/log4j.properties'这是因为与logback的冲突并未解决,导致启动失败,根据上⾯的报错信息,找到logback-classic-1.2.3.jar和slf4j-log4j12-1.7.25.jar的相应位置删除,并在pom.xml中加⼊如下排除代码:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除默认的logback⽇志,使⽤log4j--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency>启动发现⼀切正常,⾄此,log4j的配置完毕。
【IT专家】Log4j关闭Spring和Hibernate日志打印本文由我司收集整编,推荐下载,如有疑问,请与我司联系Log4j关闭Spring和Hibernate日志打印2018/02/13 264 这里所说的关闭不是全部不打印,只需要修改一下log级别就好了。
普通的info信息其实我们是不看的,因此直接设置成warn或error级别就好了。
#close java-jdbc log outlog4j.logger.java.sql.Connection=ERRORlog4j.logger.java.sql. Statement=ERRORlog4j.logger.java.sql.PreparedStatement=ERROR#close spring log outlog4j.logger.springframework=WARN#close hibernate log outlog4j.logger.opensymphony.oscache=ERRORlog4j.logger.sf.n avigator=ERRORlog4j.logger.sf.acegisecurity=WARNlog4j.logger.sf.acegisecurity.interce pt.event.LoggerListener=WARNlog4j.logger.apachemons=ERRORlog4j.logger.apache.str uts=WARNlog4j.logger .displaytag=ERRORlog4j.logger.ibatis.db =WARNlog4j.logger.apache.velocity=WARNlog4j.logger.canoo.webtest=WARNlog4j.logger.hibernate.ps.Prepa redStatementCache=WARNlog4j.logger.hibernate=WARNlog4j.logger.hibernate.SQL=ER RORlog4j.logger.hibern ate.type=ERRORtips:感谢大家的阅读,本文由我司收集整编。