1、 如何替换现有的log4j
现有项目:
去掉slf4j-log4j.jar和log4j.jar,添加logback-core.jar、logback-classical.jar。然后删除log4j.xml并且添加logback的配置文件logback.xml。(应用中有加载log4j配置文件的需要去掉)
这里是针对项目中已经使用了log4j+slf4j组合的情况。
如果现有项目只是使用了log4j,那么需要通过slf4j官方提供的工具修改项目源码(工具就是slf4j下载文件夹下的slf4j-migrator.jar)。
工具使用方法:http://www.slf4j.org/migrator.html。
如果项目使用的是log4j.properties来配置的,那么可以通过logback官方的工具转为logback.xml,但如果是log4j.xml,那么还是重新编写logback.xml比较好。
转换工具地址:http://logback.qos.ch/translator/ ,
新项目:
直接添加logback-core.jar、logback-classical.jar和log4j-over-slf4j.jar三个jar包,编写logback.xml配置文件。
2、 重加载配置文件
配置如下:
<configuration scan="true" scanPeriod="30 seconds" >
...
</configuration>
如果不指定scanPeriod,默认情况下是每分钟重新读取的配置文件。这里可以通过scanPeriod属性配置时间间隔,单位有:milliseconds, seconds, minutes or hours,如上面的三十秒(数值跟单位中间空格隔开)。这里没有指定单位的情况下默认单位是milliseconds。
PS:
1- 根据官方文档,当scan设置为true,会自动添加一个过滤器,这个过滤器在logger线程中被调用。也就是说,当调用logger.debug(),这个方法执行前,会先调用过滤器的方法。假如这时logger的级别被设置成了info,那么logger.debug()任然会被调用。
2- 自动加载会影响性能。因此,所以在实现上,不是每次logger调用都会去判断scanPeriod是否到期,默认情况是没16次调用会去检查一下scanPeriod是否到期。所以说这个重加载会有很小的延迟。(开发环境中可以忽略)
3、 针对特定用户输入debug级别的日志。
这里通过turboFilter来实现这个工具,如:在logback.xml中加入
<turboFilter class="com.ztgame.test.logback.SampleFilter">
<key>id=11,</key>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</turboFilter>
SimpleFilter.java文件:
public class SampleFilter extends TurboFilter {
private String key;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@Override
public FilterReply decide(Marker marker, Logger logger, Level level,
String format, Object[] params, Throwable t) {
if (format != null && format.contains(key)) {
return FilterReply.ACCEPT;
} else {
return FilterReply.DENY;
}
}
}
turboFilter是全局的,当logger的事件产生的时候就去做过滤。假如设置了logger的级别是info,上面的代码能让id为11的用户信息打印出来。
注意: 1. 写log的时候大家最好统一规范,潜规则是:
在什么【时间】,【人物】在【地点】做了【事件】【……】
【时间】:日志记录的时间
【人物】:日志记录的对象,如:userId=11
【地点】:输入日志的方法
【事件】:具体做了什么,如:买了xxx
【……】:其他相关信息,如:rpc耗时等等
2. 单个信息后面加上固定分割符:如userId=11,(逗号)
4、 区分开发和生产环境
logback默认加载配置文件的优先级是:logback-test.xml > logback.xml。在开发和测试阶段提供logback-test.xml来达到区分生产环境与开发环境的目的。
5、 为每个用户生产一个日志文件
用SiftingAppender来实现
logback.xml
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<Key>userid</Key>
<DefaultValue>unknown</DefaultValue>
</discriminator>
<sift>
<appender
name="FILE-${userid}" class="ch.qos.logback.core.FileAppender">
<File>log/${userid}.log</File>
<Append>false</Append>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</Pattern>
</layout>
</appender>
</sift>
</appender>
Java文件:
logger.debug("Application started");
MDC.put("userid", "Alice");
logger.debug("Alice says hello");
MDC.put("userid", null);
logger.debug("Alice says hello2");
这里需要在每次记录log之前设置用户信息。(有点麻烦,可以简单封装一下,适合新项目)
6、log文件的压缩和自动删除
logback提供一套自动压缩和删除的机制,具体配置查看logback_demos中的示例。
建议是这样一种日志布局:
|---------log根目录
|-----------------动态log文件(当前被使用)
|-----------------backup目录(用于存放日志备份)
….
|------------------------日期目录(存放压缩好的备份日志,,过期的会被自动删除)
附件:
1. 附带一些demos(eclipse项目) ,下载地址:logback_demos.zip
2. Logback官方中文手册,下载地址:Logback手册.pdf
分享到:
相关推荐
SpringBoot+Shiro权限管理系统脚手架 项目说明: 项目基于Rest ful风格的接口开发,属于前后端分离,该项目属于后端部分,主要应用了Shiro框架,结合SpringBoot,基于...日志框架:logback+slf4j; 数据库:MySql 7.X;
SpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。 logback框架会默认加载classpath下命名为logback-spring.xml或logback.xml的配置文件...
无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进。所以下面这篇文章主要给大家介绍了关于如何将应用的log4j换成logback的相关资料,文中介绍的很详细,需要的朋友可以参考下。
slf4j-logback-mdc-玩具tldr; 您的日志应为JSON。 不要使用Splunk解析日志行。 使用SLF4J,Logback和MDC的示例应用程序。 这是一个玩具。跑我./gradlew run
谈到在Java应用程序里写日志,log4j过去是现在可能仍然是事实上的标准。 由Sun提供的JDK内的写日志的方案一直无法全面推广。造成这种情况的原因当然是其缺乏可配置性和灵活性。JDK的日志方案对于比较简单的项目...
齐奥-slf4j slf4j的参照透明日志记录不要忘记在类路径中包含slf4j-api的实现(例如logback)。 libraryDependencies += "com.nequissimus" %% "zio-slf4j" % "0.4.1"用法有关简单的用法示例,请参见 。Scala兹zio-...
您可以使用 SLF4J 和 Logback API 轻松设置 logsys-ng 或 rsyslog,并将您的日志系统团队集中在 Java 应用程序中。 首先设置 logsys-ng(或 rsyslog)。 你可以简单地使用 docker [syslog-ng-docker] 修改src/main...
样品-slf4j-fluentd 这是一个使用 FluentLogger 作为 slf4j 记录器实现的示例 Web 应用程序。 它是在 Java EE REST API 应用程序上使用 fluentd 发送日志数据的演示。 您可以在不更改应用程序代码的情况下将日志目的...
SpringBoot + Shiro权限管理系统脚手架 项目说明: 项目基于Rest ful风格的接口开发,属于前分离分离,该项目属于一部分,主要应用了... 杰森:杰克逊日志框架:logback + slf4j;数据库:MySql 7.X; 在线接口文档:
) JBoss RestEasy 3.0.9.Final ( ) Guice 3.0 ( ) Apache Shiro 1.2.3 ( ) gson 2.2.4 ( ) 乔达时间 2.4 ( ) JUnit 4.10 ( ) Jukito 1.4 ( ) Logback + SLF4J XLogger ( )要求Java 8 Maven 3 应用服务器(Tomcat 9(?...
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。 logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。 ...
Java 8 Maven春天MongoDB Jo框架Logback + SLF2J JUnit AOP 查询要求Java 8 MongoDB Web 服务器 (Tomcat 8)安装签出项目。 在 barmob-parent 目录中安装父 pom.xml 文件。 使用 maven 构建 barmob。 运行mongodb js...
该版本是针对使用Java9模块(Jigsaw)但使用Slf4j版本1.7(不是Java 9模块)实现的应用程序的补丁,例如Spring boot不允许使用Slf4j 1.8.x(org.slf4j模块)。 只需将其添加到您的依赖项中,即可在应用程序中使用...
Demo_Logger 演示-将通道记录器输出到JavaFX TextArea -语言:Java,JavaFX-记录器:logback,slf4j,log4j 运行应用程序时,用户可以使用按钮来记录事件,从而将记录器数据输出到GUI TextArea(JavaFX)。
logboot是一个基于logback日志实现和slf4j日志接口的,零配置结构化日志管理组件。使用logboot后,您不用再编写logback繁琐的日志配置文件,您仅需执行日志写入的方法,logboot就会按照既定的结构生成相应的日志。...
最初,log4j作为早期流行的日志框架,广泛应用于Java项目中。然而,随着Java平台的发展,出现了多种日志框架,如JUL(java.util.logging)和JCL(Jakarta Commons Logging),这增加了选择和维护的复杂性。JCL作为一...
Example涵盖内容: 4种日志框架详解:Logback、Log4j、Log4j2和Slf4j,基于secure-ext-spring-boot-starter日志记录脱敏,spring-session基于redis存储session,集成MyBatis以及mybatis-plus3的应用实践,安全认证-...
## Spring Boot + Thymeleaf + Redis + Heroku ##这个演示应用程序已创建为在Heroku上部署Spring Boot + ... Java 8,Spring Security 3.2,Maven 3,SLF4J,Logback,Bootstrap 3.3.4,jQuery 1.11.2,i18n等 ###
我们都知道,java的日志包多种,象log4j,logback,slf4j,通用日志,log4j-over-slf4j,slf4j-over-log4j12等。这些包非常容易混在一起。最终的后果是,突然有一天你的应用系统就打印不出来日志了,更糟糕的是,你...
该库为Android应用程序提供了高度可配置的日志记录框架,同时支持多个日志目标... 在app/build.gradle ,添加以下依赖项: dependencies { compile ' org.slf4j:slf4j-api:1.7.25 ' compile ' com.github.tony19:logb