`
yuri_liuyu
  • 浏览: 177885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

logback

阅读更多

新的公司日志管理统一用logback,由于之前一直在用log4j,所以其实对logback这个由log4j长出来的家伙还不算陌生。


首先介绍下logback的前世今生。


slf4j由log4j作者Ceki开发,逐步取代apahce commons logging。

logback由log4j作者Ceki开发,逐步取代log4j。

slf4j等于commons-logging,是各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。

 

logback相比较log4j的优势

slf4j支持参数化的logger.error("帐号ID:{}不存在", userId);

告别了if(logger.isDebugEnable()) 时代。

另外logback的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。

 

slf4j和logback的使用

1.如果日志的参数超过3个,需要写成

 

 

Object[] params = {newVal, below, above};
logger.debug("Value {} was inserted between {} and {}.", params);

 

2.因为内部已优化,作者认为slf4j的logger不需要定义为static。

3.可设置缓存后批量写日志文件(但服务器如果重启,可能会丢失未写到磁盘的记录)

4.MDC,用Filter,将当前用户名等业务信息放入MDC中,在日志format定义中即可使用该变量。

5.JMS Appender用于告警, DB Appender用于业务日志等可以使用插件,如生成Log代码的Eclipse插件Log4E。

6.tomcat和glassfish中,设定日志路径为../logs/xxxx.log 都能将日志放入应用服务器本身的logs目录

 

最后把最近完善的一个logback.xml贴上,毕竟实际项目中的文件最能说明问题。

 

 

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
	<substitutionProperty name="log.base" value="d:\\logback\\logback" />
	<jmxConfigurator />
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator name="myEval">
				<expression>message.contains("dao")</expression>
			</evaluator>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
		</layout>
	</appender>
	<appender name="logfile-dao"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator name="myEval_dao">
				<expression>message.contains("dao")</expression>
			</evaluator>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<Encoding>UTF-8</Encoding>
		<File>${log.base}_dao.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}.%d{yyyy-MM-dd}_dao.log.zip
			</FileNamePattern>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
		</layout>
	</appender>
	<appender name="logfile-service"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator name="myEval_service">
				<expression>message.contains("service.impl")</expression>
			</evaluator>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<Encoding>UTF-8</Encoding>
		<File>${log.base}_service.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>${log.base}.%d{yyyy-MM-dd}_service.log.zip
			</FileNamePattern>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
		</layout>
	</appender>
	<appender name="jms_dao" class="ch.qos.logback.classic.net.JMSQueueAppender">
		<InitialContextFactoryName>
			org.apache.activemq.jndi.ActiveMQInitialContextFactory
		</InitialContextFactoryName>
		<ProviderURL>tcp://192.168.1.120:61616</ProviderURL>
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator name="myEval_service">
				<expression>message.contains("dao")</expression>
			</evaluator>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<QueueConnectionFactoryBindingName>ConnectionFactory
		</QueueConnectionFactoryBindingName>
		<QueueBindingName>cms_dao_log</QueueBindingName>
	</appender>
	<appender name="jms_service" class="ch.qos.logback.classic.net.JMSQueueAppender">
		<InitialContextFactoryName>
			org.apache.activemq.jndi.ActiveMQInitialContextFactory
		</InitialContextFactoryName>
		<ProviderURL>tcp://192.168.1.120:61616</ProviderURL>
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator name="myEval_service">
				<expression>message.contains("service.impl")</expression>
			</evaluator>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<QueueConnectionFactoryBindingName>ConnectionFactory
		</QueueConnectionFactoryBindingName>
		<QueueBindingName>cms_service_log</QueueBindingName>
	</appender>
	<logger name="com.cms5.cmsservice.jms">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.PreparedStatement">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.Connection">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.Statement">
		<level value="DEBUG" />
	</logger>
	<logger name="com.ibatis">
		<level value="DEBUG" />
	</logger>
	<logger name="com.ibatis.common.jdbc.SimpleDataSource">
		<level value="DEBUG" />
	</logger>
	<logger name="com.ibatis.common.jdbc.ScriptRunner">
		<level value="DEBUG" />
	</logger>
	<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate">
		<level value="DEBUG" />
	</logger>
	<logger name="com.danga.MemCached">
		<level value="INFO" />
	</logger>
	<logger name="org.springframework.test">
		<level value="DEBUG" />
	</logger>
	<logger name="org.apache.struts2">
		<level value="DEBUG" />
	</logger>
	<root>
		<level value="INFO" />
		<!--<appender-ref ref="stdout" />
		-->
		<appender-ref ref="logfile-dao" />
		<appender-ref ref="logfile-service" />
		<appender-ref ref="jms_dao" />
		<appender-ref ref="jms_service" />
	</root>
</configuration>
 

就先不做说明了,里面的配置还是比较明确的,关于jmsappender那部分,之前也做过简单说明。

 

 

分享到:
评论
5 楼 josico 2015-04-01  
问一下,如果在UserAction这个类中,我想打日志,有这么一个需求
在UserAction.java里面有A,B 2个函数,A这个函数,日志统一打到A.log里面。B这个函数,日志统一打到B.log里面
就是说动态制定日志输出路径及文件,而不是根据代码文件来指定该代码文件,所有的日志打到哪里
这种需求logbak如何做?
4 楼 maiziqing 2013-07-05  
麻烦问一下为什么第三方的一些log不显示呢?比如mysql的,ibatis的,期待回复一下,谢谢
3 楼 bavnnsym 2012-11-05  
logback性能比log4j好很多。我公司的很多项目都转成logback了,新的项目都是用logback。
2 楼 wenshao 2012-10-14  
logback是各种log组件中最烂的。
1 楼 AS.com 2011-09-09  
Java的相关技术还真是多,log4j还没有把握住哩,又来一logback.还是一个人开发出来的.哎.还是基础好,不变.

相关推荐

    Logback框架需要的3个jar包和logback.xml文件

    Logback 是一个在Java应用程序中广泛使用的日志记录框架,它是对早期的log4j框架的一个升级和扩展。Logback 提供了高效、灵活的日志记录解决方案,支持多种日志级别,如DEBUG、INFO、WARN、ERROR等,帮助开发者调试...

    logback下载 日志文件jar包

    Logback 是一款广泛使用的日志记录框架,由 Ceki Gülcü 创建,作为其先前作品 Log4j 的改进版。这个压缩包包含了实现 Logback 功能所需的几个关键组件,以及一个配置文件,使得用户能够方便地管理和记录应用程序的...

    logback所需jar包

    **日志框架Logback** 日志是任何软件系统中至关重要的组成部分,它为开发者提供了运行时的调试信息、错误报告以及性能分析数据。在Java世界里,Logback是一款高效、可配置的日志记录框架,由Ceki Gülcü(也是log4...

    Logback类库含logback.xml配置文件

    Logback 是一个流行的 Java 日志框架,由 Ceki Gülcü 创建,他是早期日志框架 Log4j 的主要开发者。Logback 是为了提供更高效、更灵活的日志记录解决方案而设计的,它不仅继承了 Log4j 的优点,还解决了一些性能和...

    logback.的jar包

    **日志框架Logback简介** Logback 是一个用于日志记录的开源框架,由 Ceki Gülcü(也是 Log4j 的创始人)设计并开发。它作为 Log4j 的升级版,提供了更高的性能和更丰富的功能。Logback 分为三个主要组件:...

    logback jar包和logback.xml配置文件打包下载 小白新手学Java

    在这里,我们关注的是SLF4J的API库`slf4j-api-1.7.26.jar`,以及Logback的两个核心组件`logback-core-1.2.3.jar`和`logback-classic-1.2.3.jar`,以及配置文件`logback.xml`。 首先,`slf4j-api-1.7.26.jar`是SLF4J...

    Logback所需的jar包

    免费获取Logback所需的jar包 打包合集 让你少走弯路 一.logback简介 1.logback: Logback是由log4j创始人设计的另一个开源日志组件。(好的日志记录方式可以提供我们足够多的定位错误的依据)。 2.主要有三个模块...

    logback-classic-1.2.3-API文档-中英对照版.zip

    赠送jar包:logback-classic-1.2.3.jar; 赠送原API文档:logback-classic-1.2.3-javadoc.jar; 赠送源代码:logback-classic-1.2.3-sources.jar; 包含翻译后的API文档:logback-classic-1.2.3-javadoc-API文档-...

    logback日志记录写入kafka

    Logback允许用户通过实现`ch.qos.logback.core.UnsynchronizedAppenderBase`或`ch.qos.logback.core.AppenderBase`类并覆盖`append()`方法来自定义日志处理逻辑。例如,我们可以解析JSON格式的日志,从中提取关键...

    logbackーslf4j-配置文件实例 难得

    **Logback-SLF4J配置文件详解** 在Java开发中,日志管理是不可或缺的一部分,Logback和SLF4J(Simple Logging Facade for Java)是广泛使用的日志框架。SLF4J提供了一个接口层,允许开发者选择任何底层的日志实现,...

    SpringBoot+Logback实现一个简单的链路追踪功能

    Logback是Spring Boot默认的日志实现,它提供了一种高效且灵活的日志记录方式。本文将介绍如何利用Spring Boot和Logback来实现一个简单的链路追踪功能,以便更好地跟踪用户在系统中的操作。 链路追踪(Traceability...

    logback-ext-spring-0.1.1

    logback与spring集成的文件,从官网上找的。上传的文件包括源文件和jar包,以下是连接: https://github.com/qos-ch/logback-extensions/wiki/Spring ...

    扩展logback将日志输出到Kafka实例源码

    Logback是一个广泛使用的Java日志框架,它提供了高效、灵活的日志记录功能。而Kafka是一个分布式流处理平台,常用于实时数据管道和流应用,它具有高吞吐量、可持久化以及容错性等特性。当我们需要将日志实时地传输到...

    将Logback日志输出到websocket

    标题中的“将Logback日志输出到websocket”指的是利用Logback这一强大的日志框架,结合WebSocket技术,实现实时的日志传输。Logback是Java世界中广泛使用的日志记录工具,它提供了高效的日志记录功能,而WebSocket则...

    springboot、logback源码解读

    Spring Boot与Logback源码解读涉及了Spring Boot框架在启动过程中如何与Logback日志系统集成,以及Logback是如何进行初始化和配置的。下面将详细解读Logback和Spring Boot的相关知识点。 ### Logback初始化过程 ...

    springBoot+druid+mybatis+redis+logback

    在IT行业中,SpringBoot、Druid、MyBatis、Redis和Logback是常见的技术栈,它们各自在不同的领域发挥着重要作用。以下是对这些技术的详细解释及其在"springBoot+druid+mybatis+redis+logback"组合中的应用。 **...

    logback-slf4j日志配置文件-下载即可使用

    "logback-slf4j日志配置文件下载即可使用" logback-slf4j是Java领域中一种常用的日志记录解决方案,它通过结合slf4j(Simple Logging Facade for Java)来提供了异步日志输出的功能,能够将日志输出到不同的文件中...

    采用slf4j+logback输出日志

    Logback是SLF4J的一个实现,由著名日志框架Log4j的创始人Ceki Gülcü所创建。Logback被认为是比Log4j更高效、功能更强大的日志处理框架。 本文将详细介绍如何使用SLF4J与Logback来输出应用程序的日志,并提供必要...

    logback官方中文版文档.pdf

    Logback 是一个专门为Java应用程序设计的日志框架,由log4j的创始人Ceki Gülcü设计,旨在提高日志处理的效率和灵活性。它在性能和资源消耗方面优于log4j和其他日志系统,提供了许多独特的特性,如Marker、参数化...

    shiro简单登录+logback日志记录

    《Shiro简单登录+Logback日志记录》 在现代Web开发中,权限管理和日志记录是两个不可或缺的环节。Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、会话管理和加密等功能,而Logback作为Log4j的替代...

Global site tag (gtag.js) - Google Analytics