Log4J配置 控制台、写文件、发邮件、存数据库

Log4j配置总结 分别配置控制台、写文件、发邮件、存数据库

log4j-1.2.17.jar
sqljdbc4.jar


Log4j 有3个主要组件:

  1. Loggers(日志类别)
  2. Appenders(日志要输出的地方)
  3. Layouts(日志以何种形式输出)

Loggers 五个级别:

DEBUG  <  INFO  <  WARN  <  ERROR  <  FATAL

使用:

Logger logger =Logger.getLogger(实体类.class.getName());

Appenders 设置日志要输出的地方

日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。

语法:


org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Layouts 格式化日志输出

Log4j可以在Appenders的后面附加Layouts来完成这个功能。
Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等
语法:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

log4j配置实例
控制台、写文件、发邮件、存数据库


#配置根Logger
#log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

#level:Logger优先级,appenderName是日志信息的输出地,可以同时指定多个输出地。如:log4j.rootLogger= INFO,A1,A2

log4j.rootLogger=debug,Log4jConsole,Log4jFile,LogSendEmail,LogDB

#配置日志信息输出目的地
#log4j.appender.appenderName=fully.qualified.name.of.appender.class

log4j.appender.Log4jConsole=org.apache.log4j.ConsoleAppender

#System.out用于正常的输出,也就是程序真正想输出的内容。而System.err用于出错信息的输出,也就是你本来不期待看到的东西。

log4j.appender.Log4jConsole.Target = System.out

#配置日志信息的格式,其语法为:
log4j.appender.Log4jConsole.layout = org.apache.log4j.PatternLayout
log4j.appender.Log4jConsole.encoding=UTF-8
#log4j.appender.Log4jConsole.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%t:%rms - %l ]  - %m %n
log4j.appender.Log4jConsole.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %c   - %m %n
#这里需要说明的就是日志信息格式中几个符号所代表的含义:
#    -X号: X信息输出时左对齐;
#    %p: 日志信息级别 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL  
#    %d{}: 日志信息产生时间 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
#   比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 
#    %c: 日志信息所在地(类名) 输出所属的类目,通常就是所在类的全名  
#    %m: 产生的日志具体信息 输出代码中指定的消息
#    %n: 输出日志信息换行 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”  
#    %r 输出自应用启动到输出该log信息耗费的毫秒数
#    %t 输出产生该日志事件的线程名
#    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4

#RollingFileAppender按log文件最大长度限度生成新文件,DailyRollingFileAppender按日期生成新文件。

log4j.appender.Log4jFile= org.apache.log4j.DailyRollingFileAppender
log4j.appender.Log4jFile.File = WebRoot/logfiles/Log4jFile
log4j.appender.Log4jFile.DatePattern = '_'yyyy-MM-dd-HH'.log'
log4j.appender.Log4jFile.encoding=UTF-8

# ' . ' yyyy - MM: 每个月更新一个log日志
# ' . ' yyyy - ww: 每个星期更新一个log日志
# ' . ' yyyy - MM - dd: 每天更新一个log日志
# ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一个log日志
# ' . ' yyyy - MM - dd - HH: 每小时更新一个log日志
# ' . ' yyyy - MM - dd - HH - mm: 每分钟更新一个log日志
#DatePattern中配置的'_'yyyy-MM-dd-HH-mm'.log' 意思是根据这个时间来定时生成文件,并且把'_'yyyy-MM-dd-HH-mm'.log'附加在原文件的后面,
#即:logcase_'yyyy-MM-dd-HH-mm'.log', 由于定义到mm所以就每分钟生成一次

#false:表示Logger不会在父Logger的appender里输出,默认为true。添加到末尾,false在每次启动时进行覆盖
log4j.appender.Log4jFile.Append = true

#表示所有消息都会被立即输出,不进行缓存 设为false则不输出,默认值是true。
log4j.appender.Log4jFile.ImmediateFlush = true

log4j.appender.Log4jFile.Threshold = ERROR 

log4j.appender.Log4jFile.layout = org.apache.log4j.PatternLayout
#log4j.appender.Log4jFile.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%t:%r ms - %l ]  - %m %n
log4j.appender.Log4jFile.layout.ConversionPattern = %p %d{yyyy-MM-dd HH:mm:ss.SSS} %c - %m %n


#为不同的 Appender 设置日志输出级别:
#把不同级别的日志保存在不同的文件中
#log4j.appender.D.Threshold= DEBUG ## 输出DEBUG级别以上的日志



#log 发送邮件
#log4j的邮件发送appender,如果有必要你可以写自己的appender  
log4j.appender.LogSendEmail=org.apache.log4j.net.SMTPAppender  
#发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送  
log4j.appender.LogSendEmail.Threshold=FATAL
#缓存文件大小,日志达到10k时发送Email  
log4j.appender.LogSendEmail.BufferSize=10  


#发送邮件的邮箱帐号  
log4j.appender.LogSendEmail.From=xx@xx.com
#SMTP邮件发送服务器地址  
log4j.appender.LogSendEmail.SMTPHost=xx.xx.com
#SMTP发送认证的帐号名  
log4j.appender.LogSendEmail.SMTPUsername=xx@xx.com
#SMTP发送认证帐号的密码  
log4j.appender.LogSendEmail.SMTPPassword=xxx
#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息  
log4j.appender.LogSendEmail.SMTPDebug=false
#邮件主题  
log4j.appender.LogSendEmail.Subject=Log4JErrorMessage  
#发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔;  
#如果需要发副本给某人,则加入下列行  
#log4j.appender.MAIL.Bcc=xxx@xxx.xxx  
log4j.appender.LogSendEmail.To=xx@xx.com
#不写入上层即父类logger
log4j.additivity.LogSendEmail=false

#此为输出文字格式
#log4j.appender.LogSendEmail.layout=org.apache.log4j.PatternLayout  
#log4j.appender.LogSendEmail.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n  

#此为网页格式
log4j.appender.LogSendEmail.layout=org.apache.log4j.HTMLLayout  



#此为输出html格式重写 HTMLLayout 类,根据自身需要输出不同列
#log4j.appender.LogSendEmail.layout=com.log.FormatHTMLLayout
#log4j.appender.LogSendEmail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


###LogDB
#下面是配置将日志信息插入数据库,
log4j.appender.LogDB=org.apache.log4j.jdbc.JDBCAppender
#配置输出目标为数据库,当然你也可以自己扩展org.apache.log4j.jdbc.JDBCAppender

log4j.appender.LogDB.BufferSize=1
#设置缓存大小,就是当有10条日志信息是才忘数据库插一次
#
log4j.appender.LogDB.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#设置要将日志插入到数据库的驱动                     
log4j.appender.LogDB.URL=jdbc:sqlserver://xx:xxxxx; DatabaseName=xxx

log4j.appender.LogDB.user=xx

log4j.appender.LogDB.password=xxxxx

log4j.appender.LogDB.sql=insert into WDZLOG (LogName,UserName,Class,Mothod,createTime,LogLevel,MSG) values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')
#设置要插入日志信息的格式和内容,%X{userId}是置取MDC中的key值,因为我们在过滤器中是将用户id和用户姓名放入MDC中,所有在这里可以用%X{userId}和%X{userName}取出用户的ID和用户姓名;'%C'表示日志信息是来自于那个类;%M表示日志信息来自于那个方法中;%d{yyyy-MM-dd HH:mm:ss}表示日志信息产生的时间,{yyyy-MM-dd HH:mm:ss}表示一种时间格式,你也可以直接写成%d;%p表示日志信息的级别(debug info warn error);
#%m表示你写入的日志信息
log4j.appender.LogDB.layout=org.apache.log4j.PatternLayout

传参数到log4j配置文件中

log4j.appender.LogDB.sql=insert into WDZLOG (LogName,UserName,Class,Mothod,createTime,LogLevel,MSG) values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')

import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.apache.log4j.PropertyConfigurator;
public class LogDB{
    public static Logger log=Logger.getLogger(LogDB.class);

    public static void main(String[] args) {
        PropertyConfigurator.configure("log4j.properties");
        MDC.put("userId", "qqq");
        MDC.put("userName", "eee");
        log.debug("abbbb");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值