【IT专家】Log4j关闭Spring和Hibernate日志打印

合集下载

log4j的使用方法

log4j的使用方法

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:严重错误,可能导致程序终止执行。

Java Maven项目log4j不打印日志的原因

Java Maven项目log4j不打印日志的原因
<artifactId>slf4j-log4j12</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
</dependencies>
此时在Maven Dependencies中可以看到如下图中所示,三个关于日志的jar包的显示图标明显与其他jar包不一样。
正确配置:
<depend>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
即<scope>compile</scope>
此时在Maven Dependencies中可以看到如下图中所示,三个关于日志的jar包的显示图标明显与其他jar包一样。
Maven
在src/test/java目录下的Java类打印日志,而在在src/main/java目录下的Java类却不打印日志的原因:pom.xml配置文件中关于<scope>的配置有问题,具体如下
错误配置:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>

Log4j配置最全说明

Log4j配置最全说明

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。。。

使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,lo。。。

使⽤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使用详解

Java开发日志分析工具Log4j使用详解

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日志输出规范

log4j日志输出规范

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日志,及log4jdbc记录数据库日志--步骤

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的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的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的各种输出控制的权限

Log4j笔记--log4j的各种输出控制的权限

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 log4j日志详解

java log4j日志详解

浅谈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编码常见的Log日志打印问题

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日志框架对比:Log4j、Logback和SLF4J的选择

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打印SQL及附加参数(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然后将红色代码复制到配置文件中即可。

详解Spring Boot实现日志记录 SLF4J

详解Spring Boot实现日志记录 SLF4J

在开发中打印内容,使用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的日志或SQL输出,以便于诊断

(转)灵活控制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解决与logback冲突的问题

浅谈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日志打印

【IT专家】Log4j关闭Spring和Hibernate日志打印

【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:感谢大家的阅读,本文由我司收集整编。

springbootlog4j2不能打印框架错误日志的解决方案

springbootlog4j2不能打印框架错误日志的解决方案

springbootlog4j2不能打印框架错误⽇志的解决⽅案springboot log4j2为什么不能打印框架错误⽇志问题使⽤springboot时⽼的框架使⽤的是log4j2,为了兼容不能够使⽤logback,按照⽹上的教程导⼊了log4j2但是不能够输⼊框架错误⽇志,例如bean命名重复,springmvc url映射重复,这些都是开发中所需要的友好提⽰解决⽅案怎么出现的问题,就不详细描述了,原因是我引⼊的log42是散件不是基于springboot集成配置的,导致只能够输出基本信息,原理我会在⼀个⽉后左右探究完毕补充。

下⾯我说说怎么正确⽤springboot输出springboot框架错误的1. 排除原⽣logback⽇志,否则会冲突<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- spring boot 默认的⽇志框架是Logback,所以在引⽤log4j之前,需要先排除该包的依赖,再引⼊log4j2的依赖 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>2. 引⼊集成springboot配置的log4j2我出现的我问题就是这⾥,我引⼊的是原先ssm⽤的log4j2导致,没有正确注⼊,初始log4j失败了,所以选择最省事的法⼦,引⼊⼈家写好的log4jpom<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>可以看看⼈家默认的pom.xml引⼊的log4j,就知道⾃⼰引⽤出错在哪⾥了<dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.10.0</version><scope>compile</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.10.0</version><scope>compile</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jul</artifactId><version>2.10.0</version><scope>compile</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId><version>1.7.25</version><scope>compile</scope></dependency></dependencies>配置后的效果如下图所⽰,我写了两个 @RequestMapping() value="listTree"的⽅法@RequestMapping("listTree")@ResponseBodypublic JsonResult getAreaTree() {List<AreaModel> all = areaService.findAll();all.forEach(x -> x.setName(x.getAreaName()));return new JsonResult(all);}@RequestMapping("listTree")@ResponseBodypublic JsonResult getAreaTree2() {List<AreaModel> all = areaService.findAll();all.forEach(x -> x.setName(x.getAreaName()));return new JsonResult(all);}正确打印错误⽇志[reform]2019-01-09 09:31:47.570 [WARN]:Exception encountered during context initialization - cancelling refresh attempt:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is ng.IllegalStateException: Ambiguous mapping. Cannot map 'areaController' methodpublic com.ld.model.json.JsonResult com.ld.action.area.AreaController.getAreaTree2()to {[/area/listTree]}: There is already 'areaController' bean methodpublic com.ld.model.json.JsonResult com.ld.action.area.AreaController.getAreaTree() mapped.mons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:99) springboot 2.0 log4j2⽇志打印问题⽇志不能正常打印,测试、线上环境未⽣成滚动⽇志⽇志⽂件配置:控制台信息:解决办法:在pom ⽂件中<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><!-- 排除⾃带的logback依赖 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>或者:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 排除⾃带的logback依赖 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

springboot+log4j2+slf4j控制台打印带sql日志

springboot+log4j2+slf4j控制台打印带sql日志

springboot+log4j2+slf4j控制台打印带sql⽇志springBoot⾃带的⽇志系统功能有限,⾃定义不⽅便,引⼊了log4j2+slf4j。

第⼀次引⼊报各种错,通过不断摸爬,总结以下:1.引⼊log4j2+slf4j后,需要屏蔽原来的logback,logging<!-- ⽇志使⽤ log4j2+slf4j ⽅式⾸先需要去掉boot默认的logging依赖,然后添加log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!-- 去除旧依赖 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!-- 引⼊log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>再次运⾏,果然成功了,然⽽控制台并未打印带sql的⽇志,不⽅便调试代码,经过混迹本站,历时两天,终于找到了,还得屏蔽这些<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 去掉默认的,不然log4j2没效果 --><!--去除springboot对logback的依赖 --><exclusions><exclusion><artifactId>logback-access</artifactId><groupId>ch.qos.logback</groupId></exclusion><exclusion><artifactId>logback-core</artifactId><groupId>ch.qos.logback</groupId></exclusion><exclusion><artifactId>logback-classic</artifactId><groupId>ch.qos.logback</groupId></exclusion></exclusions></dependency><!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version><!-- 打印⽇志 log4j2 需要是排除多余的jar包 springboot 默认使⽤logback log4j引⼊时候需要排除 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>还要再application.yml打开#Mybatis配置mybatis:base-packages: com.motorway.evaluate.modules.*.mapper.*mapper-locations: classpath*:/mapper/**/*.xml#控制台打印带sql⽇志:configuration打开# configuration:# log-impl: org.apache.ibatis.logging.stdout.StdOutImplconfig-location: classpath:mybatis.xml#下⾯这两个属性配合使⽤扫描pojo类的位置,package指定只扫描的包,aliases表⽰仅扫描路径下以该类作为⽗类的域对象type-aliases-package: com.motorway.evaluate.modules.system.modeltype-aliases-super-type: mon.BaseDomain #ng.Object如上所⽰,通过configuration的属性打开,在log4j2.xml实现具体效果。

log4j2打印出spring和struts2的日志

log4j2打印出spring和struts2的日志

log4j2打印出spring和struts2的日志log4j2打印出spring和struts2的⽇志最近web项⽇使⽇了log4j2,但发现⽇法打印spring和struts2的⽇志,然后查了下官⽇⽇档,描述如下:Using Log4j 2 in Web ApplicationsYou must take particular care when using Log4j or any other logging framework within a Java EE web application. It's important for logging resources to be properly cleaned up (database connections closed, files closed, etc.) when the container shuts down or the web application is undeployed. Because of the nature of class loaders within web applications, Log4j resources cannot be cleaned up through normal means. Log4j must be "started" when the web application deploys and "shut down" when the web application undeploys. How this works varies depending on whether your application is a or web application.In either case, you'll need to add the log4j-web module to your deployment as detailed in the manual page.To avoid problems the Log4j shutdown hook will automatically be disabled when the log4j-web jar is included.按照官⽇的说法,web项⽇在⽇般java项⽇的基础上添加log4j-web、servlet升级⽇3.0以上即可,但是操作完还是不⽇,折腾了很久,原来还需要加⽇jcl包,在此记录⽇下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档