Log4j入门学习

摘要:log4j框架是一个非常有用、易用的、开源的日志记录工具。本文主要介绍log4j的配置文件写法,并附上把日志信息写到控制台、文件、数据库的简单例子。

一、  安装Log4j

Log4j网址:http://logging.apache.org/log4j/1.2/

只需要把Log4j的jar包拷进lib就行。

二、  配置文件写法

Log4j配置文件配置思路主要围绕这三部分展开,它们分别是:根目录、目的地和输出样式。

记住三个类:Logger(完成日志记录,设置日志信息级别)、Appender(决定日志去向,终端、DB、硬盘)、Layout(决定日志输出的样式)

(一)Properties配置文件(键=值)

1、根目录

根目录是用来配置等级(Level)和根的,其语法格式为:

log4j.rootLogger=[level],appenderName,appenderName,…

关于level的优先级:

level是日志记录的优先级,可以是OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL、自定义级别。优先级的从高到低的顺序为:ERROR、WARN、INFO、DEBUG。(举例子:如果选的是WARN,则日志会记录自身及比它优先级高的项,即:ERROR、WARN)

关于appender:

appender用于区分不同的输出,它是可以任意命名的,如果你既想在日志文件输出,又想在控制台输出,那么就要设置两个appender了。

例子:

log4j.rootLogger=ERROR, appender1
log4j.rootLogger=INFO, appender2, appender3

2、目的地

顾名思义,目的地就是设定日志输出的地方,其格式为:

log4j.appender.appenderName=fully.qualified.name.of.appender.class
log4j.appender.appenderName.option=valueN

例子:

log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=./logs/log4jDemo.log

3、输出样式

输出样式的的格式和配置目的地一样:

log4j.appender.appenderName=fully.qualified.name.of.appender.class
log4j.appender.appenderName.option=valueN

例子:

log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout

(二)XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="appender4"
        class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="./logs/log4jDemo2.html" />
        <param name="MaxFileSize" value="1MB" />
        <param name="MaxBackupIndex" value="5" />
        <layout class="org.apache.log4j.HTMLLayout">
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="appender4" />
    </root>
</log4j:configuration>

三、  配置解析

1、log4j.rootLogger=[日志级别], appender1, appender2

1)rootLogger默认对整个工程有效。

2)若只想对某个包有效:log4j.logger.package_name=info, package1

3)若要提高性能,可以对先进行判断:

if(log.isDebugEnabled()) {
    log.debug("DEBUG!");
}

2、log4j.appender.appender1=org.apache.log4j.日志输出地

1)ConsoleAppender(控制台)

2)FileAppender(文件)

3)DailyRollingFileAppender(每天产生一个日志文件)

4)RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)

5)WriteAppender(将日志信息以流格式发送到任意指定的地方)

6)JDBCAppender(将日志信息保存到数据库中)

3、log4j.appender.appender1.File=文件目录及文件

4、log4j.appender.appender1.MaxFileSize=最大文件大小

5、log4j.appender.appender1.MaxBackupIndex=备份文件个数

6、log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式(目前这个我不知道怎么用)

7、log4j.appender.appender1.layout=org.apache.log4j.日志样式

1)HTMLLayout

2)SimpleLayout(日志信息级别、信息字符串)

3)TTCCLayout(日志产生时间、执行绪[执行的线程]、类别等)

4)PatternLayout(灵活地指定布局格式,常用)

8、log4j.appender.appender1.layout.ConversionPattern=日志输出格式

Log4j ConversionPattern参数的格式含义

格式名 含义

%c 输出日志信息所属的类的全名

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

%f 输出日志信息所属的类的类名

%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行

%m 输出代码中指定的信息,如log(message)中的message

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

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推

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

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

9、log4j.appender.ServerDailyRollingFile.Append=true追加

四、例子

(一)全局输出到控制台、硬盘

Log4jDemo:

package com.kwan.log4jDemo;

import org.apache.log4j.Logger;

public class Log4jDemo {

    private static Logger logger = Logger.getLogger(Log4jDemo.class);
    public static void main(String[] args) {
       //记录debug级别的信息
        logger.debug("Demo--This is debug message.");
       //记录info级别的信息
        logger.info("Demo--This is info message.");
       //记录error级别的信息
        logger.error("Demo--This is error message.");
    }
}

1、Properties文件配置

log4j.properties

log4j.rootLogger=debug, appender1, appender2

log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n

log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=./logs/log4jDemo.log
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout

结果:

1)console:

2)文件:

2、XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="appender3"
        class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.SimpleLayout">
        </layout>
    </appender>

    <appender name="appender4"
        class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="./logs/log4jDemo.html" />
        <param name="MaxFileSize" value="1MB" />
        <param name="MaxBackupIndex" value="5" />
        <layout class="org.apache.log4j.HTMLLayout">
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="appender3" />
        <appender-ref ref="appender4" />
    </root>

</log4j:configuration>

结果:

1)console:

2)文件:

(二)全局输出到数据库

JDBCAppender类用于把日志记录写入数据库:


Property


描述


bufferSize


设置缓冲区的大小,默认大小为1。


driver


设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcDriver


layout


设置要使用的布局。默认布局是org.apache.log4j.PatternLayout


password


 


sql


指定SQL语句在每次记录事件时执行。


URL


设置JDBC URL


user


设置数据库用户名

1、创建表(使用的是Oracle数据库)

create table log4jDemo (
logDate date not null,
logger varchar(50) not null,
logLevel varchar(10) not null,
message varchar(1000) not null
);

2、Properties文件

log4j.rootLogger=debug, appender5

log4j.appender.appender5=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.appender5.URL=jdbc:oracle:thin:@localhost:1521:orcl
log4j.appender.appender5.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.appender5.user=kwan
log4j.appender.appender5.password=12345678
log4j.appender.appender5.sql=INSERT INTO log4jDemo VALUES(to_date(‘%d{yyyy-MM-dd hh:mm:ss}‘, ‘YYYY-MM-DD hh:mi:ss‘) ,‘%C‘,‘%p‘,‘%m‘)
log4j.appender.appender5.layout=org.apache.log4j.PatternLayout

结果:

3、XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="appender6" class="org.apache.log4j.jdbc.JDBCAppender">
        <param name="URL" value="jdbc:oracle:thin:@localhost:1521:orcl" />
        <param name="driver" value="oracle.jdbc.driver.OracleDriver" />
        <param name="user" value="kwan" />
        <param name="password" value="12345678" />
        <param name="sql" value="INSERT INTO log4jDemo VALUES(to_date(‘%d{yyyy-MM-dd hh:mm:ss}‘, ‘YYYY-MM-DD hh:mi:ss‘) ,‘%C‘,‘%p‘,‘%m‘)" />
        <layout class="org.apache.log4j.PatternLayout">
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="appender6" />
    </root>

</log4j:configuration>

结果:(很遗憾,我这个写法未能成功把日志信息写入Oracle数据库,等以后想起是什么原因再补充吧,现在把报错贴下来。报错显示的是ORA-00900: 无效 SQL 语句,Properties使用一样的语句为什么就可以呢?想不明白,等以后想明白了再补充吧。)

console:

五、参考资料

1、主题:log4j详解与实战

2、eclipse, Log4j配置(真心的详细~)

3、Log4j写入数据库详解

4、java中使用log4j将日志信息写入数据库中

5、log4j日志记录到数据库

时间: 2024-08-10 01:32:19

Log4j入门学习的相关文章

Retrofit 入门学习

Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } 这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

js入门学习

在HTML,CSS学习的最后,开始入门学习javascript, 首先就是去了解它的用途 作用:使web页面能够与用户交互,作为控制浏览器给网页增添活力的方法 定义:它是一种脚本语言,作用于浏览器.和java没有半毛钱关系,主要是当时Netscape公司为了增加影响力改了名,,(是不是感觉很无耻) ps:区分程序的一种方式:1.客户端程序(client-side),像javascript就是,我觉得HTML,CSS应该也是. 2.服务器端程序(server-side),java,perl,php

mybatis入门学习

一.mybaits简介 java程序中常用的数据库框架. 二.mybait入门学习 1.环境 创建一个java或者javaweb项目:我是创建了一个structs项目,helloworld 2.添加相应的jar包

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处. \bHi\b     下列未进行说明的都是元字符. .  匹配除了换行符以外的任意字符. * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配.(不包含换行的字符) \bHi\b.*\bLucy\b \d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d - 不是元字符 ,只匹配它本身. 避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次). \

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的