Log4参数说明及常用案例

Log4j

0:导入jar包及log4j.properties配置文件

1:log4j 格式详解

1.1:日志级别

log4j.rootLogger=,

日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写

CONSOLE:控制台

注意,需在控制台输入,只需将其中一个appender定义为stdout即可

注意,rootLogger默认是对整个工程生效

注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效

注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}

注意,如果末尾为R,则以、隔开。如log4j.rootLogger=ERROR、WARN、INFO、DEBUG,R

注意,如果没有为R,则以,隔开。如log4j.rootLogger=ERROR,WARN,INFO,stdout

1.2:日志输出类型

log4j.appender.appender1 = org.apache.log4j.[控制台|文件|每天日志文件|按文件大小创建|...]

1.2.1:ConsoleAppender(控制台)

? Threshold=WARN:指定日志消息的输出最低层次。

? ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

? Target=System.err:默认情况下是:System.out,指定输出控制台

1.2.2:FileAppender(文件)

? Threshold=WARN:指定日志消息的输出最低层次。

? ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

? File=mylog.txt:指定消息输出到mylog.txt文件。

? Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

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

? Threshold=WARN:指定日志消息的输出最低层次。

? ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

? File=mylog.txt:指定消息输出到mylog.txt文件。

? Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

? DatePattern=’.‘yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:

1)’.‘yyyy-MM: 每月

2)’.‘yyyy-ww: 每周

3)’.‘yyyy-MM-dd: 每天

4)’.‘yyyy-MM-dd-a: 每天两次

5)’.‘yyyy-MM-dd-HH: 每小时

6)’.‘yyyy-MM-dd-HH-mm: 每分钟

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

? Threshold=WARN:指定日志消息的输出最低层次。

? ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

? File=mylog.txt:指定消息输出到mylog.txt文件。

? Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

? MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。

? MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

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

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

配置参数详见<使用场景 2.4>

1.2.7:JDBCAppender(将日志发送到邮箱)

配置参数详见<使用场景 2.3>

1.3:日志输出路径

log4j.appender.appender1.File=[下列参考]

#0:绝对路径:f:/logs/backup.log

#1:相对路径${user.home}/logs/backup.log

#2:相对路径:/logs/backup.log

#3:发布到Tomcat下后的相对路径:${catalina.home}/webapps/项目名称/logs/backup.log,

#4:直接在tomcat/bin/startup.bat启动,根路径开始为tomcat/bin目录)

1.4:日志布局格式

log4j.appender.appender1.layout=org.apache.log4j.[HTMLLayout | SimpleLayout | TTCCLayout]

? HTMLLayout(以HTML表格形式布局)

? SimpleLayout(包含日志信息的级别和信息字符串)

? TTCCLayout(包含日志产生的时间,执行绪,类别等信息)

? PatternLayout(可以灵活的指定布局格式,常用)

1.5:日志输出格式

log4j.appender.appender1.layout.ConversionPattern=[下列参考]

例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

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

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-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 输出产生该日志事件的线程名

可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

1.6:其他配置

log4j.logger.org.springframework=OFF

log4j.logger.org.apache.struts2=OFF

log4j.logger.com.opensymphony.xwork2=OFF

log4j.rootLogger=INFO,Error,stdout  #将c3p0的日志信息关闭,但要求将所有R改为stdout!

可参考

http://blog.csdn.net/projava/article/details/7344839

1.7:总结一下:

Logger类:完成日志记录,设置日志信息级别

Appender类:决定日志去向,终端、DB、硬盘

Layout类:决定日志输出的样式,例如包含当前线程、行号、时间

2:使用场景

2.1:按日期产生日志文件


#设置日志的级别 ,多个以、分开(没有给出的,则不会被输出)

log4j.rootLogger=ERROR、WARN、INFO、DEBUG,R

#DailyRollingFileAppender每天产生一个日志文件

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

#设置日志文件保存路径

log4j.appender.R.File=log/backup.log

#日志输出格式

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n

#设置日志文件后缀名,决定着多长时间创建一个新的文件!yyyyMMdd每天一个,yyyyMMddHH第小时一个,...

log4j.appender.R.DatePattern=‘.‘yyyy-MM-dd

#日志布局格式

log4j.appender.R.layout=org.apache.log4j.PatternLayout

2.2:按文件大小产生日志文件


#设置日志的级别 ,多个以、分开(没有给出的,则不会被输出)

log4j.rootLogger=ERROR、WARN、INFO、DEBUG,R

#RollingFileAppender:文件大小到达指定尺寸时产生一个新的文件

log4j.appender.R=org.apache.log4j.RollingFileAppender

#设置日志文件保存路径

log4j.appender.R.File=log/backup.log

#超出设置的大小,则将其以[文件名称+序号]备份后,再写入。

log4j.appender.R.MaxFileSize=3KB

#设置日志文件备份的最大序号

log4j.appender.R.MaxBackupIndex=10

#日志输出格式

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#日志布局格式

log4j.appender.R.layout=org.apache.log4j.PatternLayout

2.3:日志发到邮箱

2.3.1:依赖包3个包

? log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证)

? mail.jar

? activation.jar

2.3.2:测试环境是否能发送邮件


import org.apache.log4j.Logger;

import org.apache.log4j.PatternLayout;

import org.apache.log4j.net.SMTPAppender;

public class TestLog4jSendMail {

static Logger logger = Logger.getLogger(TestLog4jSendMail.class);

SMTPAppender appender = new SMTPAppender();

public TestLog4jSendMail() {

try {

appender.setSMTPUsername("username");

appender.setSMTPPassword("password");

appender.setTo("[email protected]");

appender.setFrom("[email protected]");

// SMTP服务器 smtp.163.com

appender.setSMTPHost("smtp.163.com");

appender.setLocationInfo(true);

appender.setSubject("Test Mail From Log4J");

appender.setLayout(new PatternLayout());

appender.activateOptions();

logger.addAppender(appender);

logger.error("Hello World");

} catch (Exception e) {

e.printStackTrace();

logger.error("Printing ERROR Statements", e);

}

}

public static void main(String args[]) {

new TestLog4jSendMail();

}

}

2.3.3:配置文件


log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

# 日志的错误级别

log4j.appender.MAIL.Threshold=ERROR,INFO,DEBUG

# 缓存文件大小,日志达到512K时发送Email

#log4j.appender.MAIL.BufferSize=10

# 发送邮件的服务器(smtp.163.com)

log4j.appender.MAIL.SMTPHost=smtp.163.com

#邮件主题

log4j.appender.MAIL.Subject=ErrorMessage

#发送邮件箱的用户

[email protected]

#发送邮件箱的密码

log4j.appender.MAIL.SMTPPassword=xxx

#发送邮件箱

[email protected]

#接受邮件箱

[email protected]

log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout

#在com.study.logMail包下面的ERROR级别以上的log都是采用邮件发送

log4j.logger.com.study.logMail = ERROR,MAIL

2.3.4:反馈如下

2.4:日志保存到数据库

2.4.1:创建数据库或表


CREATE DATABASE log4jdb


CREATE TABLE RESLOG (

createTime VARCHAR(20), #日志记录时间

threadVARCHAR(200),#线程名称

levelText VARCHAR(100),#日志级别(INFO、DEBUG、ERROR等)

logclass VARCHAR(1000),#发生事件的类全路径

message VARCHAR(4000),#日志消息

username VARCHAR(4000)  #用户

)#

2.4.2配置参数


#设置捕获的级别

log4j.rootLogger=ERROR、WARN、INFO、DEBUG,DATABASE

#设置为日志保存到数据库

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

#这个配置是告诉LOG4J,有多少条日志信息后才存入数

#数据库连接字符串据库,我这里是1,就是说有一条就查一条,显然这样在生产环境下是很影响系统性能的。

log4j.appender.db.BufferSize=10

#数据库连接字符串

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4jdb

#数据库驱动,要求导入jar!!!

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

#数据库用户名

log4j.appender.DATABASE.user=root

#数据库密码

log4j.appender.DATABASE.password=123456

#这个配置是告诉当LOG4J吧日志存储数据库时用的SQL语句。SQ_RESLOG_LOGID.Nextval是我建的一个SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是执行到类里的方法;‘%d’是打印的时间,它支持格式化;‘%P’是日志级别,包括INFO、DEBUG、ERROR等;‘%m’是MSG,日志内容。注意这里的参数区分大小写。

log4j.appender.DATABASE.sql=INSERT INTO RESLOG (createTime,thread,levelText,logclass,message,username) values (‘%d{yyyy-MM-dd HH:mm:ss}‘, ‘%t‘, ‘%p‘, ‘%l‘, ‘%m‘,‘%X{user}‘)

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

2.4.3:结果

2.5:日志应用于socket


log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender

#设置服务端的ip

log4j.appender.SOCKET.RemoteHost=localhost

#设置端口号

log4j.appender.SOCKET.Port=5001

log4j.appender.SOCKET.LocationInfo=true

# Set up for Log Facter 5

log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout

log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

2.6:应用于控制台


log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n

2.7:应用于文件回滚


log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=ERROR

log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log

log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖

log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸

log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数

log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

时间: 2024-10-07 08:54:02

Log4参数说明及常用案例的相关文章

jQuery常用案例总结

模态对话框 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>test</title> 6 <style> 7 .field{ 8 z-index: 1; 9 } 10 .cover{ 11 display: none; 12 z-index: 2; 13 position:

Logstash语法常用案例解析(一)

摘要 简述logstash的常用插件,以及简单的使用案例 一:基础运行 建议使用supervisor来管理ELK中的各个组件,方便同一管理 安装 https://www.aolens.cn/?p=809      有讲解 提供一个常用的配置: [program:logstash] command=/opt/logstash/bin/logstash -f /opt/logstash/conf/index.conf numprocs=1 ;开几个进程 dirrectory=/opt/logstas

sed常用案例(转自老男孩)

功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [[email protected] ~]# sed --version #→ sed软件版本 GNU sed version 4.2.1 语法格式 sed [options] [sed-commands] [input-file] sed [选项] [sed命令] [输入文件] 说明: 1. 注意sed和后面的选项之间至少有一个空格. 2. 为了避免混淆,本文称

JS中Dom操作的常用案例实现

本文介绍几个Dom操作的几个常用的案例.虽然现在各种web框架层出不穷,也很方便.但是了解最基本的实现方法对我们开发还是有很大的帮助的: 1.图片滚动案例 1.1  效果如下: 1.2  代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .

grep参数说明及常用用法(转)

转:https://www.cnblogs.com/leo-li-3046/p/5690613.html grep常用参数说明 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...] OPTIONS: -e: 使用正则搜索 -i: 不区分大小写 -v: 查找不包含指定内容的行 -w: 按单词搜索 -c: 统计匹配到的次数 -n: 显示行号 -r: 逐层遍历目录查找 -A: 显示匹

PHP正则匹配常用案例

正则匹配常用在表单验证上,一些字段会有一定的格式要求,比如用户名一般都要求必须是字母.数字或下划线组成,邮箱.电话等也都有自己的规则,因此使用正则表达式可以很好的对这些字段进行验证. <?php$user = array(    'name' => 'spark1985',    'email' => '[email protected]',    'mobile' => '13312345678');//进行一般性验证if (empty($user)) {    die('用户信

Logstash语法常用案例解析(二)

摘要 此篇主要讲Filter插件,已经对nginx 日志的各种处理实例 接着上篇继续说插件 1,Filter插件 Grok:正则捕获 Date:时间处理 Mutate:数据修改 Geoip:查询归类 JSON:编解码 Grok:解析和结构化任何文本. http://grokdebug.herokuapp.com/patterns#        匹配规则,注意空格,如果空格不匹配也会报错 http://grokdebug.herokuapp.com/                       

LogMiner常用案例

1 LogMiner案例 Enable Supplemental Logging Extract a LogMiner Dictionary(unless you plan to use the online catalog) Specify Redo Log Files for Analysis Start LogMiner Query V$LOGMNR_CONTENTS End the LogMiner Session 1.1 显式指定重做日志文件的LogMiner实例 本节内容必须开启最小

swiper轮播器的常用案例分析(swiper hover停止mouseover停止)

API地址 基础演示 hover停止需要自己设置,代码如下 var mySwiper= new Swiper('.swiper-container', { //这里的常规的设置参数 pagination: '.swiper-pagination', slidesPerView: 5, paginationClickable: true, spaceBetween: 30, loop:true, autoplay:1000, loopedSlides:5 }); $('.swiper-contai