log4j logback slf4j项目配置中的简单总结
一. Log4j+commons-logging
JAR包
commons-logging-1.1.jar
log4j-1.2.15.jar
配置文件
commons-logging.properties
log4j.xml
commons-logging.jar包读取commons-logging.properties中指定的log,自动加载日志配置
在commons-logging+log4j组合中commons-logging.properties指定的日志为:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j指定具体日志输出配置
如果未选用commons-logging,可以在启动项目中,主动加载log4j的配置文件
二. Logback+slf4j
JAR包
slf4j-api-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
配置文件
Logback.xml
logback的加载采用编码加载
三. Slf4j+log4j
JAR包
slf4j-api-1.5.2.jar
slf4j-log4j12-1.5.2.jar
log4j-1.2.15.jar
配置文件
Logback.xml
四. Slf4j+logback+logback
注:这种情况下是项目中有log4j输出的日志以及logback数据的日志.老项目改造,log4j和logback共存的情况下.(当选用spring+slf4j+logback的时候,spring的日志输出是log4j的,这个时候采用这种配置.)
JARbao
log4j-over-slf4j-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
slf4j-api-1.5.2.jar
配置文件
Logback.xml
配置加载
五. Log4j配置文件示例
六. Logback配置文件示例
七. 相关简单说明
Log4j
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码
Slf4j
简单日记门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。
Logback
Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
JAR包
commons-logging-1.1.jar
log4j-1.2.15.jar
配置文件
commons-logging.properties
log4j.xml
commons-logging.jar包读取commons-logging.properties中指定的log,自动加载日志配置
在commons-logging+log4j组合中commons-logging.properties指定的日志为:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j指定具体日志输出配置
如果未选用commons-logging,可以在启动项目中,主动加载log4j的配置文件
二. Logback+slf4j
JAR包
slf4j-api-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
配置文件
Logback.xml
logback的加载采用编码加载
- StringlogbackCfg="/config/logback.xml";
- URLlogURL=newClassPathResource(logbackCfg).getURL();
- ILoggerFactoryloggerFactory=LoggerFactory.getILoggerFactory();
- LoggerContextloggerContext=(LoggerContext)loggerFactory;
- loggerContext.shutdownAndReset();
- JoranConfiguratorconfigurator=newJoranConfigurator();
- configurator.setContext(loggerContext);
- configurator.doConfigure(logURL);
String logbackCfg = "/config/logback.xml"; URL logURL = new ClassPathResource(logbackCfg).getURL(); ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); LoggerContext loggerContext = (LoggerContext) loggerFactory; loggerContext.shutdownAndReset(); JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(loggerContext); configurator.doConfigure(logURL);
三. Slf4j+log4j
JAR包
slf4j-api-1.5.2.jar
slf4j-log4j12-1.5.2.jar
log4j-1.2.15.jar
配置文件
Logback.xml
四. Slf4j+logback+logback
注:这种情况下是项目中有log4j输出的日志以及logback数据的日志.老项目改造,log4j和logback共存的情况下.(当选用spring+slf4j+logback的时候,spring的日志输出是log4j的,这个时候采用这种配置.)
JARbao
log4j-over-slf4j-1.5.2.jar
logback-classic-0.9.9.jar
logback-core-0.9.9.jar
slf4j-api-1.5.2.jar
配置文件
Logback.xml
配置加载
- StringlogbackCfg="/config/logback.xml";
- URLlogURL=newClassPathResource(logbackCfg).getURL();
- ILoggerFactoryloggerFactory=LoggerFactory.getILoggerFactory();
- LoggerContextloggerContext=(LoggerContext)loggerFactory;
- loggerContext.shutdownAndReset();
- JoranConfiguratorconfigurator=newJoranConfigurator();
- configurator.setContext(loggerContext);
- configurator.doConfigure(logURL);
String logbackCfg = "/config/logback.xml"; URL logURL = new ClassPathResource(logbackCfg).getURL(); ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); LoggerContext loggerContext = (LoggerContext) loggerFactory; loggerContext.shutdownAndReset(); JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(loggerContext); configurator.doConfigure(logURL);
五. Log4j配置文件示例
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPElog4j:configurationSYSTEM"log4j.dtd">
- <log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">
- <!--控制台输出-->
- <appendername="CONSOLE"class="org.apache.log4j.ConsoleAppender">
- <paramname="Target"value="System.out"/>
- <paramname="Threshold"value="INFO"/>
- <layoutclass="org.apache.log4j.PatternLayout">
- <paramname="ConversionPattern"
- value="%d{yyyy-MM-ddHH:mm:sssss}[%-p][%-c][line:%-L]\r\n%m%n"/>
- </layout>
- <!—以下是过滤一些不需要输出的log信息-->
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="newaseqnospend"/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="newhi[type="/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="FileTransfer.execCommand()"/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- </appender>
- <!--文件输出按照文件大小滚动文件-->
- <appendername="xxxx_file"class="org.apache.log4j.RollingFileAppender">
- <paramname="Append"value="true"/>
- <paramname="Threshold"value="INFO"/>
- <paramname="File"value="xxxx.log"/>
- <paramname="MaxFileSize"value="100MB"/>
- <paramname="MaxBackupIndex"value="15"/>
- <layoutclass="org.apache.log4j.PatternLayout">
- <paramname="ConversionPattern"
- value="%d{yyyy-MM-ddHH:mm:sssss}[%-p][%-c][line:%-L]\r\n%m%n"/>
- </layout>
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="newaseqnospend"/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="newhi[type="/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- <filterclass="org.apache.log4j.varia.StringMatchFilter">
- <paramname="StringToMatch"value="FileTransfer.execCommand()"/>
- <paramname="AcceptOnMatch"value="false"/>
- </filter>
- </appender>
- <!--错误输出过滤出错误日志信息-->
- <appendername="xxxx_error"class="org.apache.log4j.RollingFileAppender">
- <paramname="Append"value="true"/>
- <paramname="Threshold"value="ERROR"/>
- <paramname="File"value="xxxx-error.log"/>
- <paramname="MaxFileSize"value="100MB"/>
- <paramname="MaxBackupIndex"value="4"/>
- <layoutclass="org.apache.log4j.PatternLayout">
- <paramname="ConversionPattern"
- value="%d{yyyy-MM-ddHH:mm:sssss}[%-p][%-c][line:%-L]\r\n%m%n"/>
- </layout>
- </appender>
- <!--根loggr-->
- <root>
- <appender-refref="CONSOLE"/>
- <appender-refref="xxxx_file"/>
- <appender-refref="xxxx_file_error"/>
- </root>
- </log4j:configuration>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- 控制台输出--> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <param name="Threshold" value="INFO" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n" /> </layout> <!— 以下是过滤一些不需要输出的log信息 --> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="new a seq no spend" /> <param name="AcceptOnMatch" value="false" /> </filter> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="new hi[type=" /> <param name="AcceptOnMatch" value="false" /> </filter> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="FileTransfer.execCommand()" /> <param name="AcceptOnMatch" value="false" /> </filter> </appender> <!--文件输出 按照文件大小滚动文件--> <appender name="xxxx_file" class="org.apache.log4j.RollingFileAppender"> <param name="Append" value="true" /> <param name="Threshold" value="INFO" /> <param name="File" value="xxxx.log" /> <param name="MaxFileSize" value="100MB" /> <param name="MaxBackupIndex" value="15" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n" /> </layout> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="new a seq no spend" /> <param name="AcceptOnMatch" value="false" /> </filter> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="new hi[type=" /> <param name="AcceptOnMatch" value="false" /> </filter> <filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" value="FileTransfer.execCommand()" /> <param name="AcceptOnMatch" value="false" /> </filter> </appender> <!-- 错误输出 过滤出错误日志信息--> <appender name="xxxx_error" class="org.apache.log4j.RollingFileAppender"> <param name="Append" value="true" /> <param name="Threshold" value="ERROR" /> <param name="File" value="xxxx-error.log" /> <param name="MaxFileSize" value="100MB" /> <param name="MaxBackupIndex" value="4" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss sss}[%-p][%-c][line:%-L] \r\n %m%n" /> </layout> </appender> <!-- 根loggr --> <root> <appender-ref ref="CONSOLE" /> <appender-ref ref="xxxx_file" /> <appender-ref ref="xxxx_file_error" /> </root> </log4j:configuration>
六. Logback配置文件示例
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEconfiguration>
- <configuration>
- <jmxConfigurator/>
- <!--控制台输出日志-->
- <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
- <layoutclass="ch.qos.logback.classic.PatternLayout">
- <pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>
- </layout>
- </appender>
- <!--文件输出日志(文件大小策略进行文件输出,超过指定大小对文件备份)-->
- <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>xxxx.log</File>
- <rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
- <FileNamePattern>xxxx.log.%i.bak</FileNamePattern>
- <MinIndex>1</MinIndex>
- <MaxIndex>12</MaxIndex>
- </rollingPolicy>
- <triggeringPolicy
- class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>100MB</MaxFileSize>
- </triggeringPolicy>
- <layoutclass="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</Pattern>
- </layout>
- </appender>
- <appendername="FILE-ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender">
- <filterclass="ch.qos.logback.classic.filter.LevelFilter">
- <level>ERROR</level>
- <OnMismatch>DENY</OnMismatch>
- <OnMatch>ACCEPT</OnMatch>
- </filter>
- <File>xxxx-err.log</File>
- <rollingPolicyclass="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
- <FileNamePattern>xxxx-err.log.%i.bak</FileNamePattern>
- <MinIndex>1</MinIndex>
- <MaxIndex>3</MaxIndex>
- </rollingPolicy>
- <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>100MB</MaxFileSize>
- </triggeringPolicy>
- <layoutclass="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</Pattern>
- </layout>
- </appender>
- <!--这里指定loggername是为jmx设置日志级别做铺垫-->
- <loggername="com.xxx.xxx">
- <levelvalue="INFO"/>
- <appender-refref="STDOUT"/>
- <appender-refref="FILE"/>
- <appender-refref="FILE-ERROR"/>
- </logger>
- </configuration>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration> <configuration> <jmxConfigurator /> <!-- 控制台输出日志 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份)--> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>xxxx.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <FileNamePattern>xxxx.log.%i.bak</FileNamePattern> <MinIndex>1</MinIndex> <MaxIndex>12</MaxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>100MB</MaxFileSize> </triggeringPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern> </layout> </appender> <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <OnMismatch>DENY</OnMismatch> <OnMatch>ACCEPT</OnMatch> </filter> <File>xxxx-err.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <FileNamePattern>xxxx-err.log.%i.bak</FileNamePattern> <MinIndex>1</MinIndex> <MaxIndex>3</MaxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>100MB</MaxFileSize> </triggeringPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern> </layout> </appender> <!--这里指定logger name 是为jmx设置日志级别做铺垫 --> <logger name="com.xxx.xxx"> <level value="INFO" /> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="FILE-ERROR" /> </logger> </configuration>
七. 相关简单说明
Log4j
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码
Slf4j
简单日记门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。
Logback
Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
相关推荐
当我们提到“log4j-slf4j+logback1.3.0”时,这意味着在一个项目中,SLF4J被用作日志的抽象层,而Logback 1.3.0作为实际的日志实现。这样的组合允许开发者利用SLF4J的简单API编写日志代码,同时享受Logback提供的高...
当你在项目中使用SLF4J时,你可以选择Log4j或Logback作为底层实现。通常,由于Logback的性能优势,很多现代项目会优先考虑使用Logback。 **使用场景** - **小型项目**:如果项目规模较小,不需要复杂的日志配置,...
在使用logback-slf4j之前,需要在Maven项目中添加以下依赖项: * `<groupId>org.slf4j</groupId>`:slf4j-api依赖项,提供了日志记录的API。 * `<groupId>ch.qos.logback</groupId>`:logback-core、logback-...
总结,SLF4J和Log4j的组合使用让日志管理更加灵活,开发者可以通过SLF4J的简洁API进行日志记录,同时利用Log4j的强大功能,如自定义输出格式和多种输出目的地。通过适当的配置和测试,我们可以确保日志系统按照预期...
1. 添加依赖:在项目中引入"log4j-slf4j-impl-2.11.2.jar"以及SLF4J的API库(slf4j-api.jar)。 2. 配置Log4j:创建log4j.properties或log4j.xml配置文件,指定日志级别、输出目的地、格式等。 3. 使用SLF4J API:...
总结一下,这个压缩包提供了Log4j 2和SLF4J的核心组件,允许开发者利用SLF4J的简单接口和Log4j 2的强大功能。通过SLF4J的绑定实现,可以在保持代码与日志实现解耦的同时,享受到Log4j 2的高效和灵活。在实际项目中,...
删除项目中存在的Log4j1.x所必须的log4j和slf4j-log4j12等依赖可以使用以下命令: mvn dependency:tree > tree.log cat tree.log | grep log4j 添加Slf4j和Log4j2的依赖可以使用以下配置: <groupId>org.slf4j ...
SLF4J(Simple Logging ...总的来说,“log4j_slf4j.jar”是一个方便的组合包,它整合了SLF4J和Log4j,使得开发者可以轻松地在项目中实现日志记录,同时保留了更换日志框架的可能性,提高了项目的可维护性和可移植性。
在"hibernate3-log4j-slf4j"的场景中,我们通常会将SLF4J作为日志接口,然后使用Log4j作为具体的日志实现。SLF4J提供了一个桥接器(slf4j-log4j12.jar),使得Log4j可以被SLF4J调用。这样做的好处是保持代码的独立性...
7. **在Web项目中的应用**: 在Web项目中,Logback和SLF4J用于记录服务器端的日志,帮助开发者追踪错误和调试代码。而JSON和XML的转换则常用于前后端数据交换,如API请求和响应。 综上所述,这个项目可能包含了一个...
总结起来,"Junit+log4j+slf4j"是Java开发中常见的组合,它们协同工作,为软件的测试和日志管理提供有力支持。JUnit确保代码质量,log4j提供详尽的日志记录,而SLF4J则作为一个适配器,使得日志框架的选择变得更加...
在Java项目中使用Logback和SLF4J,首先需要在项目的类路径下包含SLF4J的API jar和Logback的实现jar。然后,通过配置logback.xml或logback-test.xml文件来定制日志行为,包括日志级别(TRACE, DEBUG, INFO, WARN, ...
SLF4J(Simple Logging Facade for Java)是Java中一个重要的日志接口框架,它为各种日志实现提供了一个抽象层,使得开发者能够在运行时动态地选择具体使用的日志实现,例如Log4j、Java Util Logging (JUL)、Logback...
- **添加依赖**:首先,在你的项目中,需要添加SLF4J和Log4j的相关依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.slf4j <artifactId>slf4j-api <version>1.7.x ...
1. **添加依赖**:确保你的项目中包含SLF4J和Log4j2的依赖库。在Maven的pom.xml文件中,你可以添加以下依赖: ```xml <groupId>org.slf4j <artifactId>slf4j-api <version>1.7.x <groupId>org.apache....
**Logback-SLF4J配置文件详解** 在Java开发中,日志管理是不可或缺的一部分,Logback和SLF4J(Simple Logging Facade for Java)是广泛使用的日志框架。SLF4J提供了一个接口层,允许开发者选择任何底层的日志实现,...
在使用SLF4J和Log4j12时,你需要注意的一点是,由于Log4j1.2相比Log4j2在某些方面可能较旧,例如性能和功能更新,因此在新项目中,你可能会考虑使用更新的SLF4J绑定器,如slf4j-log4j2,以便利用Log4j2的改进特性。...
SLF4J(Simple Logging Facade for Java)和Logback是Java日志处理的两个重要组件,它们在软件开发中广泛用于记录应用程序的运行时信息。SLF4J是一个日志门面,它提供了一个统一的接口,允许开发人员在运行时插入所...
描述中提到的是`slf4j-log4j`,这通常是指SLF4J的Log4j绑定包,它提供了SLF4J到Log4j的桥接,使得SLF4J调用能够被Log4j接收并处理。在项目中,你需要将这两个jar包加入到类路径中,同时配置Log4j的配置文件,以指定...