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种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...
随机推荐
- Finally 与 return
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...
- Qt操作Oracle
很久以前写过<Qt数据库操作>的一篇文章,在操作数据库的时候,温习了一下!感觉很好!但在操作Oracle数据库时又遇到了一些问题.在使用QSqlRelationalTableModel操纵 ...
- mongoose find查询意错点
//使用mongoose查询文档所有结果时容易出现的问题 ArticleContents.getAll = function(name, callback){ var query = {}; if(n ...
- Wordpress添加关键词和描述
找到主题的header.php文件,然后在其<head>标签内加入加一下代码: 详细版 <?php $description = ''; $keywords = ''; if (is ...
- 1058 N的阶乘的长度
1058 N的阶乘的长度 基准时间限制:1 秒 空间限制:131072 KB 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= ...
- Swift-07-析构器deinit
析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用.析构器用关键字deinit来标识,类似于构造器用init来标识. 原理: Swift会自动释放不再需要的实例以释放资源.Swift通 ...
- :first与:first-child的区别
说的简单,:first表示单个元素,:fisrt-child表示的多个元素(集合). 如果追求深一点的话, 1.$(:first).css()表示全局或局部全局的第一个,也就是表示单个元素 2.$(: ...
- jQuery学习之jQuery Ajax用法详解(转)
[导读] jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍.我们先从最简单的 ...
- java实现读取文件内容(不同类型)
在一些项目中大量的数据经常需要从文件中读取,例如xml文件,txt文件,csv文件 1.读取本地的xml文件,需要注意对应的路径 //读取xml文件,xmlFile为读取文件的路径 DocumentB ...
- Linux 文件系统错误的修复方法 ddrescue替代dd的恢复软件 备用超级块
Linux 文件系统错误的修复方法 ddrescue替代dd的恢复软件 备用超级块 最近处理的一件 linux 服务器断电导致文件系统启动后文件系统不可读写,数据不可用的案例,现总结下 Linux ...