鹤岗住房和城乡建设局网站,html教程菜鸟教程下载,深圳网站开发公司,交易链接大全点击下方关注我#xff0c;然后右上角点击...“设为星标”#xff0c;就能第一时间收到更新推送啦~~~ 介绍几个日志使用方面的基础知识。 1 Log4j 1、Log4j 介绍 Log4j#xff08;log for java#xff09;是 Apache 的一个开源项目#xff0c;通过使用 Log4j#xff0c;我… 点击下方关注我然后右上角点击...“设为星标”就能第一时间收到更新推送啦~~~ 介绍几个日志使用方面的基础知识。 1 Log4j 1、Log4j 介绍 Log4jlog for java是 Apache 的一个开源项目通过使用 Log4j我们可以控制日志信息输出到日志文件、也可以控制每一条日志的输出格式通过定义每一条日志信息的级别我们能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置而不需要修改应用程序的代码。 2、Log4j 使用步骤说明 1选择 jar 包 加入 log4j-1.2.17.jar 到 Libraries 下如果使用 maven 项目也可以选择在 pom.xml 中新增依赖如下 dependency
groupIdlog4j/groupId
artifactIdlog4j/artifactId
version1.2.17/version
/dependency 2log4j.properties 配置 Log4j 有三个主要组件记录器 appender 和布局。这三种类型的组件协同工作使开发人员能够根据消息类型和级别记录消息并在运行时控制这些消息的格式和报告位置。 Log4j 建议只使用四个级别优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。 比如定义了 INFO 级别只有等于及高于这个级别的才进行处理则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。ALL打印所有的日志OFF关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。 在 src 根目录下建立 log4j.properties根据自己的需求相应的修改其中的配置其内容如下所示 #配置根Logger
#改代码表示输输出info级别以上的日志文件分别输出一个是file一个是errorlog4j.rootLoggerinfo,file,error
#配置file日志信息输出目的地Appender
#定义名为file的输出端是每天产生一个日志文件log4j.appender.fileorg.apache.log4j.DailyRollingFileAppender #指定日志信息的最低输出级别位INFO默认为DEBUG。log4j.appender.file.ThresholdINFO #指定当前消息输出到jpm/log4j/log.log文件中log4j.appender.file.File/jpm/log4j/log.log #指定按天来滚动日志文件log4j.appender.file.DatePatternyyyy-MM-dd #配置日志信息的格式布局Layout是可以灵活地指定布局模式log4j.appender.file.layoutorg.apache.log4j.PatternLayout #格式化日志Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.file.layout.ConversionPattern[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n #指定输出信息的编码log4j.appender.file.encodingUTF-8
#配置error日志信息输出目的地Appender
#定义名为error的输出端是每天产生一个日志文件log4j.appender.errororg.apache.log4j.DailyRollingFileAppender #指定日志信息的最低输出级别位ERROR默认为DEBUG。log4j.appender.error.ThresholdERROR #指定当前消息输出到jpm/log4j/error.log文件中log4j.appender.error.File/jpm/log4j/error.log #指定按月来滚动日志文件log4j.appender.error.DatePatternyyyy-MM #配置日志信息的格式布局Layout是可以灵活地指定布局模式log4j.appender.error.layoutorg.apache.log4j.PatternLayout #格式化日志Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.error.layout.ConversionPattern[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n #指定输出信息的编码log4j.appender.error.encodingUTF-8
#使某个功能的日志单独输出到指定的日志文件log4j.logger.saveUserLogINFO,saveUserLog #该配置就是让job的日志只输出到自己指定的日志文件中,表示Logger不会在父Logger的appender里输出默认为true。log4j.additivity.saveUserLogfalselog4j.appender.saveUserLogorg.apache.log4j.DailyRollingFileAppenderlog4j.appender.saveUserLog.File/jpm/log4j/saveUserLog.loglog4j.appender.saveUserLog.DatePatternyyyy-MM-ddlog4j.appender.saveUserLog.Appendtruelog4j.appender.saveUserLog.layoutorg.apache.log4j.PatternLayoutlog4j.appender.saveUserLog.layout.ConversionPattern%m%nlog4j.appender.error.encodingUTF-8 3输出日志的代码示例 package jpm;
import org.apache.log4j.Logger;
public class TestLog4j {
public static void main(String[] args) {
final Logger logger Logger.getLogger(TestLog4j.class); final Logger saveUserLog Logger.getLogger(saveUserLog); if (logger.isDebugEnabled()) {logger.debug(debug);logger.info(info);logger.error(error);saveUserLog.info(张三,男,26岁,北京大学,2018-05-19,学霸);}
} 4以上代码示例生成的日志文件及日志详情 2 JUL java.util.logging 1、JUL java.util.logging 介绍 Java Logging API 是 Sun 公司于 2002 年 5 月正式发布的。它是自 J2SE 1.4 版本开始提供的一个新的应用程序接口JUL在 java.util.logging 包下需 JDK1.4 版本以上才能支持java.util.logging.* 包是 JDK 的日志记录 API。 强烈不推荐使用 java.util.logging 记录日志因此这里不提供对应示例。 3 java common logging commons-logging 提供的是一个日志接口是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的其中包括 log4j 以及 Java log 的日志架构。commons-logging 有两个基本的抽象类Log(基本记录器) 和 LogFactory(负责创建 Log 实例)。把日志信息抽象成 commons-logging 的 Log 接口并由 commons-logging 在运行时决定使用哪种日志架构。因为 Log4j 的强大功能commons-logging 一般会和 Log4j 一起使用这几乎成为了 Java 日志的标准工具。 4 SLF4J 介绍 SLF4J 全称为 Simple Logging Facade for JAVA即 java 简单日志门面。和 commons-loging 一样也是对不同日志框架提供的一个门面封装可以在部署的时候不修改任何配置即可接入一种日志实现方案能支持多个参数并通过 {} 占位符进行替换。 看这个 Log4J 示例 Logger.debug(Hello name); 由于字符串拼接的问题注上述语句会先拼接字符串再根据当前级别是否低于 debug 决定是否输出本条日志即使不输出日志字符串拼接操作也会执行因此许多公司一般强制使用下面的语句这样只有当前处于DEBUG级别时才会执行字符串拼接 if (logger.isDebugEnabled()) {LOGGER.debug(“Hello ” name);
} 它避免了字符串拼接问题可是有点太繁琐了。而 SLF4J 提供下面这样简单的语法 LOGGER.debug(Hello {}, name); 它的形式类似第一条示例但是又没有字符串拼接问题也不像第二条那样繁琐。 正是因为 SLF4J 的这个占位符功能使得人们越来越多的地使用 SLF4J 这个接口用到实际开发项目中。 为什么需要日志接口直接使用具体的实现不就行了吗 接口用于定制规范可以有多个实现使用时是面向接口的导入的包都是 SLF4J 的包或者是 JCL 的包而不是具体某个日志框架中的包即直接和接口交互不直接使用实现所以当需要更换实现的时候直接更换实现就可以了而不用更改代码中的日志相关代码。 比如SLF4J 定义了一套日志接口项目中使用的日志框架是 log4j开发中调用的所有接口都是 SLF4J 的不直接使用 log4j项目应用调用 SLF4J 的接口SLF4J 的接口去调用 log4j 的实现整个应用程序并没有直接使用 log4j当项目需要更换更加优秀的日志框架时如 logback只需要引入 logback 的 jar 和 logback 对应的配置文件即可完全不用更改 Java 代码中的日志相关的代码 logger.info(“hello world”)也不用修改日志相关的类的导入的包import org.slf4j.Logger; import org.slf4j.LoggerFactory;。 因此日志门面的使用为后续具体日志系统的实现更换带来了方便。 后面为大家介绍项目中的 Logback 使用示例。