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种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...
随机推荐
- php-->mongodb[curd操作]
<?php /** * PHP操作MongoDB学习笔记 */ //************************* //** 连接MongoDB数据库 **// //********* ...
- php-fpm
install php-fpm # Ubuntu sudo apt-get install python-software-properties; sudo add-apt-repository pp ...
- 【转】全面解析Unity3D自动生成的脚本工程文件
http://blog.csdn.net/jjiss318/article/details/7632041 我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如: Assemb ...
- .Net Install类的Install、Commit等事件触发顺序
.Net Install类的Install.Commit等事件触发顺序 空间 首先是Install其中调用base.Install过程中导致OnBeforeInstallOnAfterInstal ...
- myeclipse调式与属性显示
最近做项目的时候发现一个奇怪的东西,当我用myeclipse调式时,调式窗口显示实体user所关联的role的对象属性是空的,但是,从syst打印出来是有的,最近感到很奇怪,后来发现这只是调式的一种显 ...
- Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)
一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.m ...
- 查看特性Attribute数据
加载程序集 Assembly loAssembly = Assembly.Load( lcAssembly ) ; Type[ ] laTypes = loAssembly.GetTypes( ...
- 1011 最大公约数GCD
1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B < ...
- asp:gridview 中显示日期格式
boundfield中应该这样设置: <asp:BoundField HeaderText="发表时间" DataField="PostTime" Htm ...
- iOS ASIHTTPRequest 使用指南
http://www.devdiv.com/iOS_iPhone-ASIHTTPRequest使用指南---_lt__lt_翻译稿_gt__gt_---连载-thread-93741-1-1.html