LOG4J 配置大全

[置顶] log4j应用与struts2.x结合( 包括日志入数据库)

分类: LOG4J 1940人阅读 评论(1) 收藏 举报
(1)
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
(2)
log4j的基本应用:
只须导入log4j对应的JAR包;写上配置文件(xml/properties),在代码中声明logger实例,调用即可。(具体实例见下)
(3)
Log4j配置文件详细说明(*.properties和*.xml)
3.1 属性文件Properties
properties属性文件
编号
配置项
配置项描述
示例
1
log4j.threshold
阈值项
log4j.threshold = error
2
log4j.rootLogger
根日志属性项
log4j.rootLogger = info,stdout1,stdout2
3
log4j.category.
子日志属性项(旧)
log4j.category.com.eos = NULL,stdout1
4
log4j.logger.
子日志属性项(新)
log4j.logger.com.eos.log = debug,stdout2
5
log4j.additivity.
appender是否继承设置
log4j.additivity.com.eos = false
6
log4j.appender.
输出目的地定义项
log4j.appender.stdout2 = org.apache.log4j.ConsoleAppender
7
log4j.appender.A.layout
输出格式定义项
log4j.appender.stdout2.layout = org.apache.log4j.PatternLayout
 
3.2 文件xml
xml文件
编号
配置项
配置项描述
示例
1
threshold
阈值项
<log4j:configuration xmlns:log4j=" http://jakarta.apache.org/log4j/" debug="false" threshold="null">
2
root
根日志属性项
<root>
    <priority value="info"/>
     <appender-ref ref="CONSOLE"/>
   </root>
3
priority
级别项(旧)
<priority value="info"/>
4
level
级别项(新)
<level value="info"/>
5
category
子日志属性项(旧)
<category additivity="true" name="com.eos.log">
6
logger
子日志属性项(新)
<logger additivity="true" name="com.eos">
7
appender-ref
输出端控制项
<appender-ref ref="CONSOLE"/>
8
additivity
appender是否继承设置
<logger additivity="true" name="com.eos">
9
appender
输出目的地定义项
<appender class="org.apache.log4j.ConsoleAppender" name="CONSOLE">
10
layout
输出格式定义项
<layout class="org.apache.log4j.PatternLayout">

3.3 详细说明(只针对Log4j常用的)Appender
  Appender基本种类

  org.apache.log4j.ConsoleAppender(控制台)
  org.apache.log4j.FileAppender(文件)
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  · ConsoleAppender选项
  Threshold=WARN:指定日志消息的输出最低层次。
  ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  Target=System.err:默认情况下是:System.out,指定输出控制台
  · FileAppender 选项
  Threshold=WARN:指定日志消息的输出最低层次。
  ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  File=mylog.txt:指定消息输出到mylog.txt文件。
  Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  · 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: 每分钟
  · 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:指定可以产生的滚动文件的最大数。
 
3.4  详细说明(只针对Log4j)Layout
package com.coderdream.log4j;
import org.apache.log4j.Logger;
public class HelloLog4j {
 private static Logger logger = Logger.getLogger(HelloLog4j.class);
 public static void main(String[] args) {
  // 记录debug级别的信息
  if (logger.isDebugEnabled()) {
   logger.debug("This is debug message from Dao.");
  }
  // 记录info级别的信息
  if (logger.isInfoEnabled()) {
   logger.info("This is info message from Dao.");
  }
  // 记录error级别的信息
  logger.error("This is error message.");
 }
}
log4j配置文件:
log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
1.SimpleLayout
只输出日志水平及日志信息:
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
输出结果:
DEBUG - This is debug message.
INFO - This is info message.
ERROR - This is error message.
2.TTCCLayout
输出当前方法名+日志水平+类路径+日志信息
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
输出结果:
[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.
3.HTMLLayout
输出为html格式的日志.
#输出到文件(这里默认为追加方式)
log4j.appender.appender1=org.apache.log4j.FileAppender
#【1】文本文件
#log4j.appender.appender1.File=c:/Log4JDemo02.log
#【2】HTML文件
log4j.appender.appender1.File=c:/Log4JDemo02.html
#设置文件输出样式
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
4.PatternLayout
自定义样式
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行
log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n
输出结果:
0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j -com.coderdream.log4j.HelloLog4j.main
(HelloLog4j.java:16) -This is debug message.

log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
输出:
[09:52:24:906][com.coderdream.log4j.HelloLog4j-main] -This is debug message.
 
(4)
设置特定目录日志:
package com.coderdream.log4jDao;  --当前路径
import org.apache.log4j.Logger;
public class HelloDao {
 private static Logger logger = Logger.getLogger(HelloDao.class);
 public static void main(String[] args) {
  // 记录debug级别的信息
  if (logger.isDebugEnabled()) {
   logger.debug("This is debug message from Dao.");
  }
  // 记录info级别的信息
  if (logger.isInfoEnabled()) {
   logger.info("This is info message from Dao.");
  }
  // 记录error级别的信息
  logger.error("This is error message from Dao.");
 }
}
在log4j.properties配置文件中:
log4j.rootLogger=debug,appender1,appender2   --用于输出项目根目录下的所有类日志.
log4j.logger.com.coderdream.log4jDao=info,appender1,appender2 --输出特定目录日志.
分析:
若只有上面的第一句或第二句都可以正常运行日志;
若两句都存在,以特定目录定义的为准。
若如下:
log4j.logger.com.coderdream.log4jDao222=info,appender1,appender2
运行HelloDao类日志时,会出错,如下:
log4j:WARN No appenders could be found for logger (com.coderdream.log4jDao.HelloDao).
log4j:WARN Please initialize the log4j system properly.
 
(5)自定义日志过滤器
  Log4j的日志输出控制级别比较中有一个缺陷就是只能大于某个级别时才能输出,没有小于某个级别时才输出的控制,当然一般不会用到,如果有类似这样的需求是不是就做不到了呢?不是的,这时候你可以使用日志过滤器来实现。比如有这样一个需求,输出到控制台的日志信息,当级别小于WARN时,用 System.out;当大于等于WARN时,用System.err。
  过滤器定义如下:
public final class CustomWarnLevelFilter extends org.apache.log4j.spi.Filter {
 public int decide(LoggingEvent event) {
  //大于等于WARN的日志不允许输出
  if(event.getLevel().toInt() >= Level. WARN.toInt()) {
   return DENY;
  } else {
   return ACCEPT;
  }
 }
}
配置文件中可以这样配置:
<appender class="com.primeton.ext.common.log.EOSConsoleAppender" name="CONSOLE_OUT">
 <param name="Target" value="System.out"/>
 <layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%C][Line:%L] %m%n"/>
 </layout>
 <filter class=" CustomWarnLevelFilter "/>
</appender>
<root>
 <level value="DEBUG"/>
 <appender-ref ref="CONSOLE_OUT"/>
</root>
 
(6)性能影响因素Log4j
Log4j一直被人所诟病的也就是它的性能问题了,所以在这里简要的说明一下使用log4j的注意事项:
1)、如果你的日志实例的名称不是经常变化,请将它定义为static变量。
2)、如果你的message构造很复杂,那么在构造之前,请先使用isXXXEnabled()判断:(如下:)
  // 记录debug级别的信息
  if (logger.isDebugEnabled()) {
   logger.debug("This is debug message from Dao.");
  }
  // 记录info级别的信息
  if (logger.isInfoEnabled()) {
   logger.info("This is info message from Dao.");
  }

3)、配置文件中格式控制如果不需要,尽量不要输出类名和行号。
4)、如果Appender是文件类型,请不要把文件大小设的太小。
       至少设为10MB(<param name="MaxFileSize" value="10MB"/>)。
5)、如果不是即时调试程序,把你的级别设定为高级别,最好是threshold=INFO之上。
6)、如果不是想即时看到日志信息,你也可以把Appender的ImmediateFlush 设为false(<param name="ImmediateFlush" value="false"/
7)log4j.properties实例:
#定义根目录日志
log4j.rootLogger=DEBUG, CONSOLE
#DEBUG, CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
#定义特定目录日志
log4j.logger.org.apache=INFO, FILE    

###################
# Console Appender
###################
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=%d [%p] - %m%n


#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append= false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d [%p] - %m%n


########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append= true
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=%d [%p] - %m%n


####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
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=%d [%p] - %m%n


########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000


########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=yourname@domain.com
log4j.appender.MAIL.SMTPHost=mail.primeton.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=test@domain.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=%d [%p] - %m%n


########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql: //localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (%d [%p] - %m%n)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%d [%p] - %m%n


log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

###################
#自定义Appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = yourname@domain.com

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =%d [%p] - %m%n
(8)log4j.xml实例(在strut中应用实例):
Struts使用Log4J。
在项目里的,[JavaSource]下做一个,log4j.xml或log4j.properties以后 Struts就可以使用Log4J了,log4j.xml,log4j.properties是Log4J的设置文档。 struts先读入log4j.xml,要是没有再读入log4j.properties。
<? xml version ="1.0" encoding ="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
< log4j:configuration     xmlns:log4j ='http://jakarta.apache.org/log4j/' >

<!--     
org.apache.log4j.ConsoleAppender (输出到控制台),
org.apache.log4j.FileAppender        (输出到文件),
org.apache.log4j.DailyRollingFileAppender
(每天输出产生一个日志文件),
org.apache.log4j.RollingFileAppender
(文件大小到达指定尺寸的时候产生一个新的文件),
可通过 log4j.appender.R.MaxFileSize=100KB 设置文件大小,
还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。
org.apache.log4j.WriterAppender
(将日志信息以流格式发送到任意指定的地方)    
-->

<!--     
输出通道"STDOUT",输出所有信息到控制台
(也就是System.out.println())    
-->
< appender name ="STDOUT" class ="org.apache.log4j.ConsoleAppender" >
<!-- 输出自定义内容的LOG -->
< layout     class ="org.apache.log4j.PatternLayout" >
<!-- 输出时Log内容的具体定义 -->
< param name ="ConversionPattern"
         value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
</ appender >

<!--     
输出通道"DEBUG",输出方式是:只输出DEBUG级别的LOG,并文件
大小到达指定大小时产生新的Log文件    
-->
< appender name ="DEBUG" class ="org.apache.log4j.RollingFileAppender" >
<!-- 输出Log文件的路径和文件名 -->
< param name ="File" value ="logs/debug/debug.log" />

<!-- TOMCAT等WEB服务器重新启动时,是否插入到原有的LOG文件里,true 插入false 新建 -->
< param name ="Append" value ="true" />

<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->

<!-- 因选择了RollingFileAppender了才有下面两个 MaxFileSize,MaxBackupIndex 选项 -->
<!-- MaxFileSize是一个LOG文件的最大的文件大小,当LOG文件超过这个值时,自动转成 *.log.1的LOG文件 -->
< param name ="MaxFileSize" value ="500KB" />

<!-- MaxBackupIndex生成自动转成 *.log.1的LOG文件的个数,设置3时最多生成3个LOG备份文件,它们是[*.log.1][*.log.2][*.log.3] -->
< param name ="MaxBackupIndex" value ="2" />

<!-- 输出时Log内容的具体定义 -->
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
     value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >

<!-- 过滤输出时Log内容,在这里,LevelMin,LevelMax都定义了DEBUG,
所以只输出DEBUG级别LOG的数据
-->
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
<!-- 指定输出LOG内容的最低等级 -->
< param name ="LevelMin" value ="DEBUG" />
<!-- 指定输出LOG内容的最高等级 -->
< param name ="LevelMax" value ="DEBUG" />
</ filter >
</ appender >

<!-- 输出通道"INFO",输出方式是:只输出INFO级别的LOG,并文件大小
到达指定大小时产生新的Log文件
-->
< appender name ="INFO" class ="org.apache.log4j.RollingFileAppender" >
< param name ="File" value ="logs/info/info.log" />
< param name ="Append" value ="true" />
< param name ="MaxFileSize" value ="500KB" />
< param name ="MaxBackupIndex" value ="2" />
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
             value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
< filter     class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="INFO" />
< param name ="LevelMax"     value ="INFO" />
</ filter >
</ appender >

<!-- 输出通道"WARN",输出方式是:只输出WARN级别的LOG,并文件
大小到达指定大小时产生新的Log文件
-->
< appender name ="WARN" class ="org.apache.log4j.RollingFileAppender" >
< param     name ="File" value ="logs/warn/warn.log" />
< param name ="Append" value ="true" />
< param name ="MaxFileSize" value ="500KB" />
< param name ="MaxBackupIndex" value ="2" />
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
             value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="WARN" />
< param name ="LevelMax" value ="WARN" />
</ filter >
</ appender >

<!-- 输出通道"ERROR",输出方式是:只输出ERROR级别的LOG,并文件
         大小到达指定大小时产生新的Log文件
-->
< appender name ="ERROR" class ="org.apache.log4j.RollingFileAppender" >
< param name ="File" value ="logs/error/error.log" />
< param name ="Append" value ="true" />
< param name ="MaxFileSize" value ="500KB" />
< param name ="MaxBackupIndex" value ="2" />
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
             value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="ERROR" />
< param name ="LevelMax" value ="ERROR" />
</ filter >
</ appender >

<!-- 输出通道"FATAL",输出方式是:只输出INFO级别的LOG,并文件大小
         到达指定大小时产生新的Log文件
-->
< appender name ="FATAL" class ="org.apache.log4j.RollingFileAppender" >
< param name ="FATAL" value ="logs/fatal/fatal.log" />
< param name ="Append" value ="true" />
< param name ="MaxFileSize" value ="500KB" />
< param name ="MaxBackupIndex" value ="2" />
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
             value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="FATAL" />
< param name ="LevelMax" value ="FATAL" />
</ filter >
</ appender >

<!-- 输出通道"ALL",输出方式是:输出所有级别的LOG,并文件大小到达
         指定大小时产生新的Log文件
-->
< appender name ="ALL" class ="org.apache.log4j.RollingFileAppender" >
< param name ="File" value ="logs/all/all.log" />
< param name ="Append" value ="true" />
< param name ="MaxFileSize" value ="500KB" />
< param name ="MaxBackupIndex" value ="2" />
< layout class ="org.apache.log4j.PatternLayout" >
< param name ="ConversionPattern"
             value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="DEBUG" />
< param name ="LevelMax" value ="FATAL" />
</ filter >
</ appender >

<!-- 输出通道"EVERYDAY",输出方式是:输出所有级别的LOG,并每天一个
         日志文件
-->
< appender name ="EVERYDAY" class ="org.apache.log4j.DailyRollingFileAppender" >
< param name ="File" value ="logs/ereryday/ereryday.log" />
< param name ="Append" value ="true" />
        <!-- param name="Threshold"     value="DEBUG"/ -->
<!-- 以日为单位输出LOG文件,每日输出一个LOG文件-->
< param name ="DatePattern" value ="'.'yyyy-MM-dd" />
<!-- 以时为单位输出LOG文件,每小时输出一个LOG文件
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
< layout class ="org.apache.log4j.PatternLayout" >
<!-- The default pattern: Date Priority [Category] Message -->
< param name ="ConversionPattern"
     value ="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n" />
</ layout >
<!-- 过滤输出时Log内容,在这里,LevelMin是DEBUG,LevelMax都FATAL,
            所以输出DEBUG级别到FATAL级别的LOG数据
-->
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="DEBUG" />
< param name ="LevelMax" value ="FATAL" />
</ filter >
</ appender >

<!-- 输出通道"DATABASE",输出方式是:输出所有级别的LOG到数据库 -->
< appender name ="DATABASE" class ="org.apache.log4j.jdbc.JDBCAppender" >
             <!-- 数据库的驱动,这里用的是MSSQL-->
                 < param name ="driver" value ="com.microsoft.jdbc.sqlserver.SQLServerDriver" />    

                <!-- 要连接的数据库-->
                 < param name ="URL"
                                    value="jdbc:microsoft:sqlserver://192.168.0.120:
                                    1433;DatabaseName=test" />
             <!-- 连接数据库的用户名-->
                 < param name ="user" value ="sa" />
            <!-- 连接数据库的密码-->
                 < param name ="password" value ="sa" />
            <!-- 向MSSQL数据库表LOG中插入数据的sql语句-->
                 < param name ="sql" value=" INSERT INTO LOG
                     (LOGDATE,LOGLEVEL,LOGCLASS,LOGLOGGER,LOGMESSAGE)
                     values ('%d{yyyy-MM-dd HH:mm:ss}','%.50p', '%.50c',
                                     '%.50l', '%.1000m')" />

<!-- 过滤输出时Log内容,在这里,LevelMin是ERROR,LevelMax都
             FATAL,所以输出DEBUG级别到FATAL级别的LOG数据
-->
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
     < param name ="LevelMin" value ="ERROR" />
     < param name ="LevelMax" value ="FATAL" />
</ filter >
</ appender >

<!-- 输出通道"HTML",输出方式是:输出所有级别的LOG到数据库 -->
< appender name ="HTML" class ="org.apache.log4j.RollingFileAppender" >

< param name ="File" value ="logs/html/htmllog.html" />
< param name ="Append" value ="true" />

<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->
< param name ="MaxFileSize" value ="50KB" />
< param name ="MaxBackupIndex" value ="2" />
<!-- 好像现在只有固定输出格式 -->
<!-- 输出的HTML都缺少</table></body>等代码,log4j的Bug?

            我建议是不要使用
-->
< layout class ="org.apache.log4j.HTMLLayout" >
< param name ="Title" value ="TSD HP HTML LOG" />
</ layout >
< filter class ="org.apache.log4j.varia.LevelRangeFilter" >
< param name ="LevelMin" value ="DEBUG" />
< param name ="LevelMax" value ="FATAL" />
</ filter >
</ appender >

<!-- 设置域名限制,即com.tongshida域及以下的日志均输出到下面
         对应的通道中, 虽然下面<roo>的<priority value="ERROR">设置
         成ERROR,但com.tongshida下面的程序中的LOG要输出
         level="DEBUG"的 DEBUG级别以上的LOG
-->
<!-- 给客户交货时要把它屏蔽-->
< logger name ="com.tongshida" >
<!-- 设置com.tongshida以下函数输出LOG的级别 -->
< level value ="DEBUG" />
<!-- 好像是指定输出通道,因为下面root里指定了所以这里屏蔽掉了
<appender-ref ref="DEBUG"/>
-->
</ logger >

< root >
<!-- 设置输出范围,在这里光输出ERROR以上的,ERROR级别,

            FATAL级别的LOG
-->
< priority value ="ERROR" />
<!-- 上边设置的输出通道,使用的在这里定义 -->
< appender-ref ref ="STDOUT" />
< appender-ref ref ="DEBUG" />
< appender-ref ref ="INFO" />
< appender-ref ref ="WARN" />
< appender-ref ref ="ERROR" />
< appender-ref ref ="FATAL" />
< appender-ref ref ="ALL" />
< appender-ref ref ="EVERYDAY" />
< appender-ref ref ="DATABASE" />
< appender-ref ref ="HTML" />
</ root >
</ log4j:configuration >
 
在代码中:
 Logger log = Logger.getLogger(inputClass);
 log.debug(outmessage);
 log.error(outmessage);
 log.warn(outmessage);
上面输出日志时,log.debug()会输出appender="DEBUG"的appender。因为各个appender只过滤输出debug等单一的level.当log.debug()时,只能找到appender="DEBUG".其它log.warn,log.error也一样的道理.
 
注意:
在log4j.xml中:
若只有<loger>存在时,须在其中此标签中定义<appender-ref>;
若同时也存在<root>,则<loger>中不用定义<appender-ref>,全部定义放在<root>中定义即可。此时<root>在log4j.xml的位置要在<loger>的后面,如:
 <logger name="com.coderdream.log4jDao"> 
        <level value="info" />  
</logger> 
<root>
  <level value="debug" />
  <appender-ref ref="appender1" />
 </root>
若在<root>,<loger>中同时定义了<appender-ref>,则会对一条日志信息输出两次
 
7.MSSQL_log_table_Creater.sql
CREATE TABLE [LOG] (
        ID                 INTEGER NOT NULL PRIMARY KEY,
        LOGDATE            DATETIME,
        LOGTIME            TIMESTAMP,
        LOGTHREAD          VARCHAR(50),
        LOGLEVEL           VARCHAR(50),
        LOGCLASS           VARCHAR(50),
        LOGLOGGER          VARCHAR(200),
        LOGMESSAGE         VARCHAR(2000)
)
 
(9)利用log4j配置文件输出Ibatis的sql语句
定义各种appender,此处省略.......
 
< 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.common.jdbc.SqlMapClientDelegate" >
< level value ="debug" />
</ logger >

< logger name ="java.sql.Connection" >
< level value ="debug" />
</ logger >

< logger name ="java.sql.Statement" >
< level value ="debug" />
</ logger >

< logger name ="java.sql.PreparedStatement" >
< level value ="debug" />
</ logger >

< logger name ="java.sql.ResultSet" >
< level value ="debug" />
</ logger >

< root >
< priority value ="DEBUG" />
< appender-ref ref ="console" />
< appender-ref ref ="file" />
</ root >
(10)
在struts2.x中具体应用:
在struts2.x中,log4j日志可以直接放在struts的拦截器中。
在每次访问ACTION的前后打印dubug调用前/调用后的日志;
获取Action返回状态码,若为success/faile,则打印info/error日志,且写入数据库日志表。
具体请看附件代码(解压密码用日志的登录密码)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,你可以使用Log4j来进行日志记录。下面是配置Spring Boot项目中Log4j的步骤: 1. 首先,确保在项目的pom.xml文件中添加了Log4j的依赖。可以在<dependencies>标签内添加以下内容: ```xml <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> ``` 2. 创建一个log4j.properties或log4j.xml文件,并将其放置在src/main/resources目录下。你可以根据自己的需求选择使用properties文件或者xml文件。 3. 在log4j配置文件中,定义日志输出的格式和位置。你可以设置不同的日志级别,例如DEBUG、INFO、WARN、ERROR等。下面是一个简单的log4j.properties配置示例: ```properties # 设置日志级别为INFO log4j.rootLogger=INFO, stdout # 输出到控制台 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=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n ``` 4. 在Spring Boot应用程序的application.properties或application.yml文件中,添加以下配置,以确保应用程序使用log4j作为日志框架: application.properties: ```properties # 使用log4j作为日志框架 logging.config=classpath:log4j.properties ``` application.yml: ```yaml # 使用log4j作为日志框架 logging: config: classpath:log4j.properties ``` 这样配置后,你就可以在你的代码中使用日志记录了。例如,使用以下代码在类中创建一个Logger对象并使用它进行日志记录: ```java import org.apache.log4j.Logger; public class YourClass { private static final Logger logger = Logger.getLogger(YourClass.class); public void yourMethod() { logger.info("This is an info log message"); logger.error("This is an error log message"); } } ``` 以上就是在Spring Boot中配置Log4j的基本步骤,你可以根据自己的需求进行更高级的配置和定制。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值