Log4–Java日志记录器

一、Log4
Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息.。主要分为两部分:一是appender,是输出日志的方式;二是logger,是具体日志输出器

1.Appender

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(输出到控制台)
org.apache.log4j.FileAppender(输出到文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件到达指定大小的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
例如:

<appender name=" ConsoleAppenderA"class=“org.apache.log4j.ConsoleAppender”>

<param name=“ConversionPattern"value=”%-5p %x %c{2} -%m%n"/>

 <appender name="cacheFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_HOME}/redis-cache.log</File><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/redis-cache-%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><Pattern>%date{ISO8601} %-5level [%thread] %logger{32} - %message%n</Pattern></encoder>
</appender>

其中,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
格式化日志信息Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM ddHH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
2.Logger

Log4j中有一个根日志器

默认时系统中其他所有非根logger都会继承根日志器,logger如果有level属性就会覆盖继承日志器(比如根日志器)的level属性。而appender会叠加,即本logger的配置的appender加上继承日志器上的appender。 根据继承原则得到这个logger的level是INFO,appender是ConsoleAppenderA、PROJECT、EXCEPTION_LOG。 也可以使logger不继承其他logger,使用additivity="false" 其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。

Log4j常用的四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才会处理,而DEBUG级别的日志信息将不会被打印出来。

ALL:打印所有的日志,OFF:关闭所有的日志输出。 appender-ref属性即使用logger引用之前配置过的appender。

在程序中怎么创建logger,并调用呢?

Logger logger =Logger.getLogger(VelocityService.class.getName()); 

Logger logger =LogFactory.getLog(VelocityService.class);
logger.debug(“Justtesting a log message with priority set to DEBUG”);
logger.info(“Just testinga log message with priority set to INFO”);
logger.warn(“Just testinga log message with priority set to WARN”);
logger.error(“Justtesting a log message with priority set to ERROR”);
logger.fatal(“Justtesting a log message with priority set to FATAL”);
另外,logger对name的前缀默认也有继承性,例:

根据继承原则名为com.alibaba.service.VelocityService的logger的appender是FileAppenderA和ConsoleAppenderA,level的为INFO。

二、SLF4J
Log4J (Simple Logging Facade for Java)使用普遍,但是框架较重,引入了很多无用的包,相比SLF4J就灵活很多。SLF4J很好地解耦了API和实现,例如,你可以强制使用SLF4J的API,而保持生产环境中用了几年的旧的Log4J.properties文件。

例如:

Logger.debug("Hello " + name);
由于字符串拼接的问题(注:上述语句会先拼接字符串,再根据当前级别是否低于debug决定是否输出本条日志,即使不输出日志,字符串拼接操作也会执行),许多公司强制使用下面的语句,这样只有当前处于DEBUG级别时才会执行字符串拼接:

if (logger.isDebugEnabled()) {
LOGGER.debug(“Hello ” + name);
}
它避免了字符串拼接问题,但有点太繁琐了是不是?相对地,SLF4J提供下面这样简单的语法:

LOGGER.debug(“Hello {}”, name);
它的形式类似第一条示例,而又没有字符串拼接问题,也不像第二条那样繁琐。

pom依赖:

    <dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.7</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>log4j-over-slf4j</artifactId><version>1.7.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.2</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.2</version></dependency>

参考资料:

http://ifeve.com/java-slf4j-think/

https://www.slf4j.org/

Log4--Java日志记录器相关推荐

  1. Java中的记录器 - Java日志示例

    Java中的记录器 - Java日志示例 今天我们将研究Java中的Logger.Java Logger提供了java编程的日志记录. 目录[ 隐藏 ] 1 Java中的记录器 1.1 Java Lo ...

  2. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  3. java日志学习笔记

    一.日志家族 Log4j一开始就很强大,在jdk自带日志系统之前,apache就曾经尝试把log4j划为java的一部分,不知为何没能成功,sun还是用了自己很弱的日志系统.为了兼容各个日志系统,ap ...

  4. 各种Java日志框架的比较

    2019独角兽企业重金招聘Python工程师标准>>> Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件. ...

  5. Java日志框架Slf4j+Log4j入门

    一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...

  6. Tomcat源码分析(六)--日志记录器和国际化

    本系列转载自 http://blog.csdn.net/haitao111313/article/category/1179996 日志记录器挺简单的,没有很多东西,最主要的就是一个Logger接口: ...

  7. logback日志记录器讲解

    我们看一下日志记录器的支持,logback,既支持log4j,也支持logback,找到我们的pom文件,然后看一下他的注入包,在这里我们可以看到有log4j的jar包,有slf4j的,还有logba ...

  8. tomcat(7)日志记录器

    [0]README 0.1)本文部分文字描述转自:"深入剖析tomcat",旨在学习 "tomcat的日志记录器" 的基础知识: 0.2)intro to 日志 ...

  9. java日志——修改日志管理器配置+日志本地化

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java日志--修改日志管理器配置+日志本地化 的相关知识: [1]修改日志管理器配置 1.1 ...

最新文章

  1. linux命令历史详解
  2. python文本分类评价指标 top1如何计算_python – Keras:如何计算多标签分类的准确......
  3. 《JAVA与模式》之责任链模式
  4. clickhouse安装_初识ClickHouse——安装与入门
  5. 中小企业邮件系统选型攻略
  6. 写在2021: 值得关注/学习的前端框架和工具库
  7. 路由器 VS OSI七层模型
  8. android android 修改 jpg exif 属性,Android开发之使用ExifInterface获取拍照后的图片属性...
  9. 烂泥:高负载均衡学习haproxy之安装与配置
  10. Block循环引用问题(Objective-c)
  11. Pandas Index 更新和计算(Modifyingcomputations)
  12. 关于防范ONION勒索软件病毒攻击的解决办法
  13. 佳能A系列数码相机(A720 IS)拍摄技巧大全
  14. latex ctex 中文目录在pdf阅读器的“书签”选项卡中显示乱码的解决方法
  15. BZOJ4698 Sdoi2008 Sandy的卡片
  16. UiPath与按键精灵区别
  17. 同步时序逻辑电路功能分析之同步六进制减法计数器
  18. Spring高级四十九讲笔记
  19. 1047 编程团体赛
  20. 母婴网站Zulily盈余隐秘竟然是推延发货?

热门文章

  1. ASP.NET获取远程网页下载到本地文件
  2. 在Linux上将视频转换成动态gif图片 (附:ffmpeg和ImageMagick安装方法)
  3. WebSocket实战
  4. NSString / NSMutableString 字符串处理,常用代码 (实例)
  5. ubuntu下安装、卸载软件命令
  6. Linux中的内存段(BSS、数据段、代码段、堆、栈)
  7. ubuntu software updater已意外关闭 解决办法
  8. 9203 0427 随堂小结
  9. 数据表的查看 mysql
  10. 案例 实现文件读写器 c# 1614523907