Java中几种日志方案
。本文记录Java中几种常用的日志解决方案
0x01 Log4j
。这应该是一个比较老牌的日志方案了,配置也比较简单,步骤如下
1)添加对应依赖,比如 Gradle 中
dependencies {
compile('log4j:log4j:1.2.17')
testCompile group: 'junit', name: 'junit', version: '4.11'
}
2)配置一个 log4j.properties,用来指定一些信息,比如配置输出路径、格式(appender相关)等
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
。具体其他的配置,可以百度找找。。
3)在需要使用的地方调用,主要是通过对应的级别,比如 info、debug、error 来输出不同的级别
public static Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) {
logger.debug("debug msg");
logger.info("info msg");
logger.error("err msg");
}
0x02 slf4j
。简单日志门面,slf4j 是一款通用的多日志整合方案,说白了就是提供了一套统一的接口,来统一解决不同日志系统的使用
。因为这只是一个通用的接口,所以并不涉及具体的日志方案,所以在使用时我们需要配合一门具体的日志系统来使用
。比如我们来进行和 log4j 的整合,我们除了需要配置好 slf4j 的依赖之外,还得配置其对于 log4j 的“驱动”
。比如我们在 build.gradle 中进行如下配置
compile('org.slf4j:slf4j-log4j12:1.7.13')
compile('log4j:log4j:1.2.17')
。这里我们只配了 slf4j 对应的 log4j 驱动,因为 Gradle 会自动解决依赖么~~
。因为整合 log4j,配置文件同上,使用时类似,代码如下
public static Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
logger.info("info msg");
logger.debug("debug msg");
logger.error("error msg");
}
。注意这里的 Logger 和 LoggerFactory 都是org.slf4j
包下的,不要导错了
0x03 logBack
。上面介绍了比较老牌的 log4j,logBack 和 log4j 类似,是一个日志的解决方案,而且出自同一个作者
。但是不同的是,它相对 log4j 进行了很多的改进,重写了内部实现,在某些特定的场合下速度会比 log4j 快上10倍,而且使用的内存更少
。其他和 log4j 的比较,可以参考下面 Reference 的 [从Log4j迁移到LogBack的理由]
。使用类似,首先,引入依赖
compile('ch.qos.logback:logback-classic:1.1.3')
。logBack 目前分为3个模块,logback-core,logback-classic,logback-access
。logback-core 是其他两个模块的基础模块,logback-classic 是 log4j 的一个改良版本,而且完整实现了 slf4j api,所以可以很方便的切换成其他日志系统(如log4j)
。logback-access 访问模块与 Servlet 容器集成提供了通过 HTTP 来访问日志的功能
。然后是添加配置文件(logBack会默认查找配置文件 logback.xml 或者
logback-test.xml,如果没有找到,会将日志打印到终端中),这里和 log4j 有一点不同的是,logBack 使用 XML 或者
Groovy 来进行配置,可见这几年 Groovy 在 DSL 方面的发展
。实际是调用 slf4j 的通用接口来产生 Logger 对象
。这里需要提的一点是,LogBack 可以和 Tomcat 或者 Jetty 进行配合使用,使两个容器可以进行更好的日志输出
public static Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
logger.info("info msg");
logger.debug("debug msg");
logger.error("error msg");
}
Java中几种日志方案的更多相关文章
- Java中23种经典设计模式详解
Java中23种设计模式目录1. 设计模式 31.1 创建型模式 41.1.1 工厂方法 41.1.2 抽象工厂 61.1.3 建造者模式 101.1.4 单态模式 131.1.5 原型模式 151. ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- java中8种数据类型和默认值所占字节数
java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...
随机推荐
- page fault rate
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION A program computes th ...
- Delphi XE5 如何与其他版本共存
如果你想使用Delphi诸如XE4.XE3.XE2.XE之类的版本跟Delphi XE5共存的话,在cglm.ini中简单修改两行就行啦. 找到Delphi XE5的安装根目录C:\Program F ...
- android imageButton 点击按钮前中后,按钮颜色的变化
我们在开发的过程中,往往为了美化界面的需要,会修改按钮的默认外观,而因为Android中的按钮有三种状态—默认,被点击,被选中.所以,如果要改变按钮的外观,需要对这三种情况都做出修改,也许在以往,我们 ...
- JS获取Cookie值
function GetLoginCookie() { var userCookie = getCookie("mycookie"); var loginname = userCo ...
- JVM学习笔记
1. JVM中的直接引用和符号引用 JVM在装载class文件的时候,会有一步是将符号引用解析为直接引用的过程. 那么这里的直接引用到底是什么呢? 对于指向“类型”[Class对象].类变量.类方法的 ...
- JAVA缓存技术之EhCache
最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...
- DiG HOWTO How to use dig to query DNS name servers.
Contents Introduction Understanding the default output What can I discover? How do I … Get a short a ...
- 长城坑爹宽带,劫持用户DNS赚取购物返利
今天回来登录www.jd.com 打算淘点东西,登录后发现地址栏跳到 http://www.jd.com/?utm_source=click.linktech.cn&utm_medium=tu ...
- web调试工具-firebug
Firebug是网页浏览器firefox下面的一款开发类插件.它集HTML查看和编辑,js控制台,网络状况监视器于一体,是开发js,css,HTML:和Ajax的得力助手 (自己整理的,有错误的话见谅 ...
- jquery 点击空白处隐藏div元素
<style type="text/css">.pop {display:none;width: 200px;height: 130px;background: #08 ...