搜档网
当前位置:搜档网 › 日志框架log4j和slf4j入门教程

日志框架log4j和slf4j入门教程

Java私塾《日志框架入门》

——深入浅出系列精品教程

Log4j是什么、有什么

n介绍

Log4j是Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

n是什么

一个开源的、轻量级的、用于日志管理的框架

n有什么

Log4j由三个重要的组件构成:日志信息的输出格式,日志信息的优先级,日志信息的输出目的地。日志信息的优先级用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

Log4j能干什么

n能干什么

主要用来进行日志记录的管理,包括对日志输出的目的地,输出的信息级别和输出的格式等。

n日志类别的层次结构(Loggers)

Log4j首要的相对于简单的使用System.out.println()方法的优点是基于它的在禁止一些特定的信息输出的同时不妨碍其它信息的输出的能力。这个能力源自于日志命名空间,也就是说,所有日志声明的空间,它根据一些开发员选择的公式而分类。

Logger被指定为实体,Logger的名字是大小写敏感的,它们遵循以下的命名语法规则:用“.”来划分层次级别,如:cn.javass.test

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

日志级别

n Log4j有如下级别

OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。

n几个重要规则

1:级别的控制,就是只要大于等于指定的控制级别,就可以输出

2:如果有多个logger,都可以匹配输出,则每个logger都产生输出,其中根logger 匹配所有的输出;而级别控制来源于路径最详细的logger。

n如何获得日志操作类

public class A {

private static Logger logger = Logger.getLogger(A.class);

}

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

输出源

n输出源

Log4j允许日志请求被输出到多个输出源。用Log4j的话说,一个输出源被称做一个Appender 。

一个logger可以设置超过一个的appender。

n常见Appender

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)org.apache.log4j.jdbc.JDBCAppender(把日志用JDBC记录到数据库中)

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

布局

n布局

布局就是指输出信息的格式。在Log4j中称作Layout

n常见Layout

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

最常用的PatternLayout

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例-1

n配置

Log4j有两种配置方式,一种是xml格式,一种是properties格式。都是放置到classpath下面。默认名称分别是:log4j.xml和log4j.properties

n properties配置示例如下:

log4j.rootLogger=error,javass.Console,javass.File

log4j.appender.javass.Console=org.apache.log4j.ConsoleAppender

https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout

https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{HH:mm:ss,SSS} %5p (%C{1}:%M) -%m%n

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例-2

log4j.appender.javass.File=org.apache.log4j.DailyRollingFileAppender

log4j.appender.javass.File.file=javass.log

log4j.appender.javass.File.DatePattern=.yyyy-MM-dd

https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout

https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{HH:mm:ss,SSS} %5p (%C{1}:%M) -%m%n

https://www.sodocs.net/doc/9e18741856.html,.javass=debug

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

Appender、Layout、Logger三者之间的关系通过前面的讲解,我们可以在配置文件中看出以下关系:

n每个Appender都要引用自己的Layout。

n每个Logger都可以指定一个级别,同时引用多个Appender;而一个Appender也同时可以被多个Logger引用。

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例-3

n xml配置示例如下:

value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} -%m%n" />

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例-4

class="org.apache.log4j.DailyRollingFileAppender">

value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} -%m%n" />

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

log4j.xml比log4j.properties多的功能-1

n首先要注意,log4j.xml优先于log4j.properties,如果同时存在log4j.xml和log4j.properites,以log4j.xml为准。

n在log4j.properties里,控制级别的时候,只能打印出大于指定级别的所有信息;但是在log4j.xml中可以通过filter来完成过滤:典型的引用是只打印出某种级别的信息。

class="org.apache.log4j.DailyRollingFileAppender">

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

log4j.xml比log4j.properties多的功能-2

n可以通过logger的additivity=“false”属性,来设置多个logger是否重复输出同一条信息

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

在java中使用log4j中要注意的小问题

n看似奇怪的重复级别判断:我们在看一些成熟框架的源代码中,经常看到如下代码:

if (logger.isDebugEnabled()){

logger.debug(“debug:“+name);

}

为什么不是直接logger.debug(“debug:“+name);呢?

在配置文件中虽然可以使用控制级别为比debug级别更高的级别,而不输出debug信息;但是,这里的字符串连接操作仍然会影响运行效率;如果先判断当前logger的级别,如果级别不合适的话,连这句字符串连接都可以不做了。

n在java中使用log4j时,我们可以使用它的eclipse插件log4e。它的官方网址是:http://log4e.jayefem.de/,分为商业版本和免费版本。我们只需要使用其免费版本,就可以极大的帮我们提高开发效率。比如:在一个类中声明一个logger;帮我们写麻烦的logger.isDebugEnabled();在一个方法开始的时候打印所有的参数;输出一个变量等等。

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

jdk内置的日志系统

除了使用log4j进行日志输出之外,我们还可以使用jdk内置的日志系统。它位于java.util.logging包下,因此不需要引用额外的jar包。其基本概念与log4j大同小异,我们可以类比的学习。

其配置文件位于jdk安装目录下的/jre/lib/logging.properties。

请同学们观察配置文件,自己找到我们在log4j里找的Appender、Layout、级别和Logger,以及它们的关系。

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例--1

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

#.level= ALL

# default file output is in user's home directory.

java.util.logging.FileHandler.pattern = %h/java%u.log

java.util.logging.FileHandler.limit = 50000

java.util.logging.FileHandler.count = 1

java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

# Limit the message that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = FINEST

java.util.logging.ConsoleHandler.formatter =

java.util.logging.SimpleFormatter

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

配置示例--2

# messages:

#cn.javass.level = SEVERE

cn.javass.level = WARNING

#cn.javass.level = INFO

#cn.javass.level = CONFIG

#cn.javass.level = FINE

#cn.javass.level = FINER

#cn.javass.level = FINEST

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

在java中使用jdk内置的日志系统

声明一个logger:

private static final Logger logger =

LoggerFactory.getLogger(“cn.javass.Test”);

输出信息:

logger.finest("This is finest Level");

logger.finer("This is finer Level");

logger.fine("This is fine Level");

logger.config("This is config Level");

https://www.sodocs.net/doc/9e18741856.html,("This is info Level");

logger.warning("This is warning Level");

logger.severe("This is severe Level");

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

使用classpath下的logging.properties

如果想使用自定义的logging.properties,只需要保证这段代码运行在getLogger之前即可:

ClassLoader classLoader =

Thread.currentThread().getContextClassLoader();

InputStream inputStream =

classLoader.getResourceAsStream("logging.properties");

if (inputStream != null) {

try {

LogManager.getLogManager().readConfiguration(inputStream);

} catch (SecurityException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

日志记录与异常处理规范(精)

日志记录与异常处理规范(2006-09-19 10:02:15转载日志记录与异常处理规范 1 日志记录规范规范日志设计规范主要目的是节省工作量,帮助对问题进行诊断。最终,终端用户可以获得更好的应用程序,并能从技术支持团队获得迅速的响应。 1.1 日志API 在使用 Java 平台进行开发时,使用的日志 API:Log4j-1. 2.8.jar 1.2 日志分类 l Security:记录外部对系统进行的各项操作 l Business:记录和跟踪业务逻辑执行过程 l Performance:记录和跟踪代码执行情况 1.3 日志级别日志级别有: l Debug: 包含了非常广泛的上下文信息,用于问题诊断。 l Info: 用于在产品环境中(粒度较粗)帮助跟踪执行过程的上下文消息。 l Warning: 警告消息,说明系统中可能存在问题。例如,如果这个消息类别是有关安全性方面的。 l Error: 错误消息说明系统中出现了严重的问题。这种问题通常都是不可恢复的,需要人工进行干预。表1 日志记录程序 public class Log4JTest { // Logging 类由EMIP平台提供Logging logging = Logging.getInstance("STDOUT"; public void testLogging( { //安全日志 https://www.sodocs.net/doc/9e18741856.html,("安全类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. SECURITY,"安 全类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. SECURITY,"安全类型INFO级日 志记录",new RuntimeException(; logging.error("安全类型ERROR级日志记录"; logging.error(Logging. SECURITY,"安全类型ERROR级日志记录"; logging.error(Logging. SECURITY,"安全类型ERROR级日志记录",new RuntimeException(; //业务日志 https://www.sodocs.net/doc/9e18741856.html,("业务类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. BUSINESS,"业务类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.error("业 务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR 级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; //系统日志 https://www.sodocs.net/doc/9e18741856.html,("业务类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. BUSINESS,"业务类型INFO级日志记录"; https://www.sodocs.net/doc/9e18741856.html,(Logging. BUSINESS,"业务类型INFO级日志记录",new RuntimeException(; logging.error("业 务类型ERROR级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR 级日志记录"; logging.error(Logging. BUSINESS,"业务类型ERROR级日志记录",new RuntimeException(; https://www.sodocs.net/doc/9e18741856.html,("系统类型INFO级日志记录";

log4j学习

log4j 如同Hadoop一样,把需要的jar包(hadoop.jar )和配置文件,放到CLASSPATH中, 配置Log4j也要如此,把log4j-1.2.8.jar,log4j.properties放到classpath中。配置 文件配置的是Log输出到哪里,如何输出,何时输出,哪些类的log要输出(等级)(Where, How,When,Who) 代码中用到的 private final Log log = LogFactory.getLog(getClass()); 得到类的全名,Log4j框架就会去找相应的package是否有设置输出log,以及它的等级。 如果等级为DEBUG那么log.isDebugEnabled()为true。如下所示,如果等级为INFO, 那么log.isInfoEnabled()、log.isWarnEnabled()、log.isErrorEnabled()这三个为true, 其他的为false?(有待确认) 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则 不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而 DEBUG信息不会被显示,具体讲解可参照第三部分定义配置文件中的logger。 if (log.isDebugEnabled()){ log.debug("111"); } if (log.isInfoEnabled()){ https://www.sodocs.net/doc/9e18741856.html,("222"); } 完整的文章如下: 在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人 感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。 说明:下面分为三部分, 第一部分讲解如何配置log4j; 第二部分为对log4j.properties配置文件中的各个属性的讲解; 第三部分为对log4j的详细讲解。 如果只想配置上log4j,那么只需要看前两个部分就可以,如果想对log4j深入了解,则还需看第三部分。 一、Log4j配置

Eclipse从入门到精通(第二版)_ch37

第37章 在Eclipse中使用Hibernate 本章将把Hibernate应用到myweb项目中,对数据库层的代码进行改造,同时还会介绍一些Hibernate工具的使用。 37.1 概述 37.1.1 持久化框架产生的背景和现状 什么叫持久化?数据在内存中,关机后就会丢失。而如果把数据保存到后台的数据库中,就能达到“持久”保存数据的目的。而持久化框架的目的就是为了帮助用户更好地使用数据库。 在Java数据库项目中,由于数据库是关系型而非面向对象的。很多时候,用面向对象方法完成了前期的设计和分析,到了数据库层编程时就会变得很别扭,其中最痛苦的就是写面向过程的SQL语句。 J2EE开发主要由JSP、Servlet、JavaBean和EJB 4部分组成。其中EJB是J2EE中一个比较重要的部分,它提供了企业级开发所需的分布式支持。但现实中的大部分项目都是单服务器的轻量级项目,一般都不会涉及分布式的开发环境,这时用EJB就像大炮打蚊子,蚊子没打到,房子却被打破个洞。EJB的笨重和复杂一直让开发者很不满,其中EJB中Entity Bean受到的批评最多,现实项目中鲜有使用Entity Bean的成功范例。 开发者急切地需要一种符合Java编程习惯的、适合轻量级开发的、易于使用的数据库持久化解决方案。在这个背景下就产生了轻量级的数据库持久化技术,其中最主要的就是Hibernate、JDO。 Hibernate是一个民间开源项目,有点像一个草莽英雄,但Hibernate从实用出发的设计思路,使得它脱颖而出成为最流行的持久化技术。Hibernate的作者Gavin King也一举成名,现已成为EJB 3.0专家组的成员,并且在EJB 3.0的Entity Bean部分,将采用和Hibernate 类似的设计方案。因此,Hibernate是开发者学习和使用持久化技术的一个比较好的选择,即使以后EJB 3.0一统天下,所学的Hibernate知识也不会浪费。 JDO 2.0是经JCP(Java规范管理委员会,由SUN、IBM、Oracle等共同参与)承认的一个正式规范,所以也受到了开发者很大的关注。估计未来3年内,持久化技术将以EJB 3.0、Hibernate和JDO 2.0为主,成三足鼎立之势。

ElasticSearch5.1 基本概念和配置详解

二、几个基本概念 接近实时(NRT) Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是1 秒)。 集群(cluster) 代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 索引(index)

ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。文档(document) 文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch 的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。 映射(mapping) 所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。类型(type) 每个文档都有与之对应的类型(type)定义。这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射。 分片(shards) 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 副本(replicas) 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 数据恢复(recovery)

log4j和slf4j日志框架入门

Java私塾《日志框架入门》 ——深入浅出系列精品教程

Log4j是什么、有什么 n介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 n是什么 一个开源的、轻量级的、用于日志管理的框架 n有什么 Log4j由三个重要的组件构成:日志信息的输出格式,日志信息的优先级,日志信息的输出目的地。日志信息的优先级用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。 真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

Log4j能干什么 n能干什么 主要用来进行日志记录的管理,包括对日志输出的目的地,输出的信息级别和输出的格式等。 n日志类别的层次结构(Loggers) Log4j首要的相对于简单的使用System.out.println()方法的优点是基于它的在禁止一些特定的信息输出的同时不妨碍其它信息的输出的能力。这个能力源自于日志命名空间,也就是说,所有日志声明的空间,它根据一些开发员选择的公式而分类。 Logger被指定为实体,Logger的名字是大小写敏感的,它们遵循以下的命名语法规则:用“.”来划分层次级别,如:cn.javass.test 真正高质量培训签订就业协议网址:https://www.sodocs.net/doc/9e18741856.html,

应用系统日志规范

应用系统日志规范 在应用程序中添加程序日志记录可以跟踪代码运行时轨迹,作为日后 审计的依据;并且担当集成开发环境中的调试器的作用,向文件打印代码 的调试信息。本规定Jave EE项目必须使用Commons-Logging作为日志接 口封装,选用Apache提供的可重用组件Log4j作为底层实现。 1.日志命名规范 根日志(root logger)位于日志层次的最顶层,它的日志级别不能指派为空;不能通过使用它的名字直接得到它,而应该通过类的静态方法Logger.getRootLogger得到它(指root logger)。所有其他的日志可通 过静态方法Logger.getLogger来实例化并获取,这个方法 Logger.getLogger把所想要的logger的名字作为参数,一般取本类的名字作为参数。 2.日志信息级别规范 日志信息输出的优先级从高到低至少应分为五档,分别是Fatal、ERROR、WARN、INFO、DEBUG。这些级别用来指定这条日志信息的重要程度。在测试阶段可以打开所有级别的日志,系统上线后只允许输出INFO以上级别(含INFO)。 各级别的日志信息作用规定如下: 2.1致命(Fatal) 严重的错误,系统无法正常运行,如硬盘空间满等。这个级别很少被用,常暗含系统或者系统的组件迫近崩溃。

2.2错误(Error) 系统可以继续运行,但最好要尽快修复的错误。这个级别用的较多,常常伴随Java异常,错误(Error)的环境不一定会造成系统的崩溃,系统可以继续服务接下来的请求。 2.3警告(Warn) 系统可以正常运行,但需要引起注意的警告信息。这个级别预示较小的问题,由系统外部的因素造成的,比如用户输入了不符合条件的参数。 2.4信息(Info) 系统运行的主要关键时点的操作信息,一般用于记录业务日志。但同时,也应该有足够的信息以保证可以记录再现缺陷的路径。这个级别记录了系统日常运转中有意义的事件。 2.5调试(Debug) 系统运行中的调试信息,便于开发人员进行错误分析和修正,一般用于程序日志,关心程序操作(细粒度),不太关心业务操作(粗粒度)。 系统出现问题时,必须抛出异常,在处理异常时记录日志,且日志级别必须是前三个级别(Fatal\Error\Warning)中的一种。 3.日志配置规范 所有的日志配置文件放在src目录下,编译时随同.class文件一同拷贝到(%webapp_HOME%)\WEB-INF\classes\目录下,这些配置文件必须采用properties文件的编写方法, commons-logging.properties文件用来指定commons-logging的实现为log4j,log4j.properties文件用来配置 log4j的所有参数,日志配置信息不得配置在这两个文件以外的文件中。

log4j2中文手册

Log4j2使用手册 一.Log4j2介绍 Log4j1.x被广泛应用于应用程序,但是近年发展明显放缓,因为要维持较老java版本的使用,使得log4j1.x的发展更困难。而作为其代替品,slf4j/logback做出了许多必要改进,为什么还需要log4j2? 主要有以下几个原因: (1)Log4j2被设计用作审计日志框架, log4j和logback在重载配置时,都会丢失日志时间,而log4j2不会。Logback 中appenders中的异常对于应用来说是不可见的,log4j2可以配置异常向应用渗透。 (2)Log4j2 包含基于LMAX Disruptor library的下一代无锁Asynchronous Loggers,在多线程环境下, Asynchronous Loggers相比slf4j/ logback提高了10倍以上的吞吐量,并且有着更低的延时。 (3)Log4j2的插件机制,使得在不需要修改框架的情况下,通过添加 Appenders, Filters, Layouts, Lookups轻松 扩展框架。 (4)简单的插件配置,无需指定具体类名即可在configuration中配置插件。 (5)支持自定义日志级别,可以在代码或者configuration中自定义日志级别。 (6)支持lambda表达式,java8的应用可以在请求日志级别启用时使用lambda表达式懒构建一个日志消息,不 需要显示的日志级别检查,使得代码更简洁。 (7)支持消息对象,消息允许支持有趣和复杂的结构,传递到日志记录系统,并且可以高效的操作。用户可以自由 创建消息类型和编写Layouts, Filters and Lookups来操作这些消息。 (8)Log4j1在Appenders 上支持Filters 。logback增加了TurboFilters ,允许在日志事件在处理前进行过滤。Log4j2 可以配置Filters在Logger后者Appender前运行。 (9)许多Logback的Appenders不接受Layout,并且只能按照固定格式发送日志数据。大部分log4j2接收Layout 配置,允许日志数据按照任何所需格式传输。 (10)Log4j1与logback的Layouts是返回一个String类型,这可能导致一些编码问题。Log4j2使用了简单的方式:

【IT专家】Log4j关闭Spring和Hibernate日志打印

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Log4j关闭Spring和Hibernate日志打印 2018/02/13 264 这里所说的关闭不是全部不打印,只需要修改一下log级别就好了。普通的info信息其实我们是不看的,因此直接设置成warn或error级别就好了。 ?#close java-jdbc log outlog4j.logger.java.sql.Connection=ERRORlog4j.logger.java.sql.Statement=ERRORlog4 j.logger.java.sql.PreparedStatement=ERROR#close spring log outlog4j.logger.springframework=WARN#close hibernate log outlog4j.logger.opensymphony.oscache=ERRORlog4j.logger.sf.navigator=ERRORlog4j.l ogger.sf.acegisecurity=WARNlog4j.logger.sf.acegisecurity.intercept.event.LoggerListener =WARNlog4j.logger.apachemons=ERRORlog4j.logger.apache.struts=WARNlog4j.logger .displaytag=ERRORlog4j.logger.ibatis.db=WARNlog4j.logger.apache.velocity=WARNlo g4j.logger.canoo.webtest=WARNlog4j.logger.hibernate.ps.PreparedStatementCache=WA RNlog4j.logger.hibernate=WARNlog4j.logger.hibernate.SQL=ERRORlog4j.logger.hibern ate.type=ERRORtips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

log4j.properties配置文件配置项的说明

在程序中,可以以以下方式来使用 Log log = https://www.sodocs.net/doc/9e18741856.html,mons.logging.LogFactory.LogFactory.getLog(yourClassName.class); log.debug("debug message -------------------"); https://www.sodocs.net/doc/9e18741856.html,("inf o message ******************"); log.warn("w arn message +++++++++++++++"); log.error("error msg================="); 本文主要讲的是如何配置log4j,先让我们先看看一个典型的log4j配置: ==========log4j.properties================== log4j.appender.stdout=org.apache.log4j.ConsoleAppender https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n log4j.appender.f ileout=org.apache.log4j.RollingFileAppender log4j.appender.f ileout.File=D:/w orkspace/log4jtest/log/application.log log4j.appender.f ileout.MaxFileSize=10000KB log4j.appender.f ileout.MaxBackupI ndex=10 log4j.appender.f https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout log4j.appender.f https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n log4j.rootCategory=INF O, stdout, fileout https://www.sodocs.net/doc/9e18741856.html,.wolf square.log2=DEB UG,stdout =================================== 这个文件可以划为三小块 ===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释,目前先记着有这样两个名词):log4j.appender.stdout=org.apache.log4j.ConsoleAppender 定义stdout的实际输出实现类,从这个appender实现类名可以猜到,这个类是负责控制台输出的。 https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout 定义stdout的输出装饰器 https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n 装饰器参数配置 ============第二块定义了一个名为 fileout 的appender和layout: log4j.appender.f ileout=org.apache.log4j.RollingFileAppender 同理可猜这个实现类是输出到文件的 log4j.appender.f ileout.File=D:/w orkspace/log4jtest/log/application.log log4j.appender.f ileout.MaxFileSize=10000KB log4j.appender.f ileout.MaxBackupI ndex=10 log4j.appender.f https://www.sodocs.net/doc/9e18741856.html,yout=org.apache.log4j.PatternLayout log4j.appender.f https://www.sodocs.net/doc/9e18741856.html,yout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n ============第三块定义了名字分别为rootCategory,https://www.sodocs.net/doc/9e18741856.html,.wolf square.log2的两个logger log4j.rootCategory=INF O, stdout, fileout https://www.sodocs.net/doc/9e18741856.html,.wolf square.log2=DEB UG,stdout rootCategory logger是缺省的logger,记录所有的包的信息输出。 第二个logger是只输出指定包com.w olf square.log2下的日志信息。

log4j输出到文件和数据库

log4j输出到文件和数据库 控制台的实现就不说了,这里提供两种实例的配置,一种是输出为文件的(每天输出一个文件),一种为输出到数据库的配置。 1、输出到文件: Properties代码 log4j.rootCategory=WARN, CONSOLE, FILE https://www.sodocs.net/doc/9e18741856.html,.surfilter.bt=FATAL,TOFILE log4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.TOFILE.Threshold=FATAL log4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.html log4j.appender.TOFILE.Append=true log4j.appender.TOFILE.ImmediateFlush=true log4j.appender.TOFILE.DatePattern='.'yyyy-MM-dd'.html' https://www.sodocs.net/doc/9e18741856.html,yout=com.surfilter.bt.util.FormatHTMLLayout log4j.rootCategory=WARN, CONSOLE, FILE https://www.sodocs.net/doc/9e18741856.html,.surfilter.bt=FATAL,TOFILE log4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.TOFILE.Threshold=FATAL log4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.html log4j.appender.TOFILE.Append=true log4j.appender.TOFILE.ImmediateFlush=true log4j.appender.TOFILE.DatePattern='.'yyyy-MM-dd'.html' https://www.sodocs.net/doc/9e18741856.html,yout=com.surfilter.bt.util.FormatHTMLLayout 这里的com.surfilter.bt.util.FormatHTMLLayout是重写了log4j提供的HTMLLayout类,具体代码如下: Java代码 import java.text.SimpleDateFormat; import java.util.Map; import org.apache.log4j.HTMLLayout; import https://www.sodocs.net/doc/9e18741856.html,yout; import org.apache.log4j.Level; import org.apache.log4j.helpers.Transform; import org.apache.log4j.spi.LocationInfo; import org.apache.log4j.spi.LoggingEvent;

一份比较完整的log4j的xml配置

须og4项 须og4项..xm须 须og4项 须ogger Logger.getRootLogger() 须ogger Logger.getLogger(String name) 须ogger Logger.getLogger(C须ass c须azz) Logger.getLogger(c须azz.getName()) (.setLeve须(int,Exception)) Leve须.ALL Leve须.DEB此G Leve须.INFO Leve须.WARN Leve须.ERROR Leve须.FA正AL Leve须.OFF Appender(.addAppender(Appender).setAdditivity(boo须ean additive) ) org.apache.须og4项.Conso须eAppender targer: Conso须eAppender.SYS正EM_O此正(Defau须t) Conso须eAppender.SYS正EM_ERR pub须ic Conso须eAppender(Layout) pub须ic Conso须eAppender(Layout,String targer) org.apache.须og4项.Fi须eAppender pub须ic Fi须eAppender(Layout,String fi须eName) pub须ic Fi须eAppender(Layout,String fi须eName,boo须ean append) org.apache.须og4项.Dai须yRo须须ingFi须eAppender , org.apache.须og4项.Ro须须ingFi须eAppender , pub须ic Ro须须ingFi须eAppender(Layout,String fi须eName) void setMaxBac顺upIndex(int index) void setMaximumFi须eSize(须ong size) org.apache.须og4项.WriterAppender org.apache.须og4项.JDBCAppender (Layout) %c %d %f %须

java日志与验证码

java日志: 日志的网上很多也: https://www.sodocs.net/doc/9e18741856.html,/view/ccb3ce1efc4ffe473368abdf.html 你自己看看。我们的系统里面一般都是自己写了一个程序。将用户的操作信息,IP,时间,操作内容写入我们数据库里面。 Tomcat的日志一般我们用绿色版,它自带有日志功能。 java验证码: 1 根据一个随机值,生成一个模糊图片,然后将随机值封装到session中。 1.1 生成图片的类: package com.framework.security; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Serializable; import java.util.Random; /** *随机验证码 *User: *Date:2006-11-2 *Time:11:31:00 *To change this template use File|Settings|File Templates. */ public class ImgCheckCode implements Serializable { private String charRandomCode = ""; private BufferedImage imageRandomCode; private int width; private int height; public ImgCheckCode(int width, int height) { this.width = width; this.height = height; create(4); } public ImgCheckCode(int width, int height, int length) { this.width = width; this.height = height;

Java日志系统框架的设计与实现

Java日志系统框架的设计与实现 在Java领域,存在大量的日志组件,open-open收录了21个日志组件。日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有着重要的作用,我们可以把Java日志系统看作是必不可少的跟踪调试工具。 1.简介 日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。这种服务通常以两种方式存在: 1.日志系统作为服务进程存在。Windows中的的事件日志服务就属于这种类型,该类型的日志系统通常通过消息队列机制将所需要记录的日志由日志发送端发送给日志服务。日志发送端和日志保存端通常不在同一进程当中,日志的发送是异步过程。这种日志服务通常用于管理员监控各种系统服务的状态。 2.日志系统作为系统调用存在。Java世界中的日志系统和Unix环境下诸多守护进程所使用的日志系统都属于这种类型。日志系统的代码作为系统调用被编译进日志发送端,日志系统的运行和业务代码的运行在同一进程空间。日志的发送多数属于同步过程。这种日志服务由于能够同步反映处系统运行状态,通常用于调试跟踪和崩溃恢复。 本文建立的日志系统基本属于第二种类型,但又有所不同。该日志系统将利用Java线程技术实现一个既能够反映统一线程空间中程序运行状态的同步日志发送过程,又能够提供快速的日志记录服务,还能够提供灵活的日志格式配置和过滤机制。 1.1系统调试的误区 在控制台环境上调试Java程序时,此时往控制台或者文本文件输出一段文字是查看程序运行状态最简单的做法,但这种方式并不能解决全部的问题。有时候,对于一个我们无法实时查看系统输出的系统或者一个确实需要保留我们输出信息的系统,良好的日志系统显得相当必要。因此,不能随意的输出各种不规范的调试信息,这些随意输出的信息是不可控的,难以清除,可能为后台监控、错误排除和错误恢复带来相当大的阻力。 1.2日志系统框架的基本功能 一个完备的日志系统框架通常应当包括如下基本特性: 所输出的日志拥有自己的分类:这样在调试时便于针对不同系统的不同模块进行查询,从而快速定位到发生日志事件的代码。

log4j教程

以前都是把所有日志都输出到一个文件下面,今天有个同事问想把某个包下的日志输出到 指定的地方,于是就在网上查了一些资料,总结一下,以免以后用到。 一、log4j是什么? Log4j是一个开源的日志记录组件,其产品已经相当的成熟,且使用非常的广泛。在工程 中以易用,方便等代替了 System.out 等打印语句。 Log4j的目标是:它允许开发人员以任意的精细程度控制哪些日志说明被输出。通过使用 外部的配置文件,可以在运行时配置它。 Log4j的具体在 https://www.sodocs.net/doc/9e18741856.html,/log4j/找到它(有使用的文档说明)。另外,log4j已经被转换成 C, C++, C#, Perl, Python, Ruby, 和 Eiffel 语言。 二、通常我们建立一个log4j.properties文件放在src下,编译之后就生成在../web- inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可,中定位这 个文件,并读入这个文件完成的配置。这个配置文件告诉Log4J以什么样的格式、把什 么样的信息、输出到什么地方。 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明: 1、 Loggers Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。 假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息 就不显示了。 其语法表示为: org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

Log4j 日志内容详解

Log4j详细解 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。 1.2. Log4j简介 在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 此外,通过Log4j其他语言接口,您可以在C、C+ +、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI 甚至是SNMP应用中。 Log4j有三个主要的组件: Loggers(记录器),Appenders (输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:1、Loggers Loggers组件在此系统中被分为五个级别:DEBUG、INFO、W ARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < W ARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。 假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。 Java程序举例来说: ***建立Logger的一个实例,命名为“com.foo”*** Logger logger = Logger.getLogger("com.foo"); ***"com.foo"是实例进行命名,也可以任意*** ***设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。*** logger.setLevel(https://www.sodocs.net/doc/9e18741856.html,); Logger barlogger = Logger.getLogger("com.foo.Bar"); ***下面这个请求可用,因为W ARN >= INFO*** logger.warn("Low fuel level."); ***下面这个请求不可用,因为DEBUG < INFO*** logger.debug("Starting search for nearest gas station.");

日志记录规范

平常我的系统开发运行过程中,记录关键信息对于完善和修改提出了明确的建议。但是在现实的一些应用中的日志记录比较混乱,导致无法准确快速的定位问题发生的地方和问题发生的时候以及问题发生的场景。我就依据我平时使用log4j进行日志记录的一点心得与大家分享如何更加规范的记录日志信息,如果有不妥的问题请明示我好进行相应的改进,共同进步哈。 1.要记录什么类型日志 我们的系统开发常常会涉及到系统致命错误日志,系统可控错误日志,用户操作日志和系统运行日志这四大类日志的记录。记录致命性错误用于记录会影响整个系统正常运行的错误,比如我们在开发过程中的try...catch...模块中抛出的一些未能预料到的系统错误,而且这种错误会导致系统运行失败的信息进行记录。系统可控错误日志,这一类的日志发生之后其实不会导致系统运行出现异常的,可能是对某些数据的初始化深入验证出现的问题。用户操作日志这一类日志量比较大,同时这一类日志用于跟踪用户的行为分析是非常的重要的应为可以作为用户数据挖掘发现用户的喜好等一些信息。程序运行信息记录,这一类信息用于记录子过程运行情况。 2.致命错误如何记录 如上所述我们明确的错误日志,是用来记录系统费预测性错误,可能导致网站爆出黄页相应的操作流程无法进行下去。或则在一些安装程序中记录导致系统突然退出的相关信息。在防御式编程中经常使用try....catch...模块包括一个程序的运行过程,catch的最后捕获的一级Exception是我们无法控制也无法预测的系统运行异常,这里我们记录fatal致命性错误,我这里一般记录的是一场发生的堆栈信息。如下程序块: [html]view plaincopyprint? 1.try { 2. VerificationUser(user); 3. String result = OrderTicket(user,flight); 4. orderticket.trace("执行占座成功!占座成功的代码: "+result); 5. https://www.sodocs.net/doc/9e18741856.html,(user.getName()+"执行了占座操作,占座编码 为"+result); 6. String ticketNo= GenariteTicket(result); 7. genariteTicket.trace("执行出票成功!出票成功票号: "+ticketNo);

相关主题