<!--
Struts Chapter 9 Log4j(系统运行时的状态记录日志)
Goal:能够给自己的做的系统写一个系统运行的状态日志记录,便于以后系统的维护!
当然,也是为了学Hibernate打好基础!然后呢~这个呢,也没什么好说的~我就直接把前辈
们总结好的东西直接就贴上来了~呵呵~又懒了一次!
-->
一,首先是向sir给我们的log4j.properties的标准版,然后我自己加了一点注释,然后其中的各个参数将会在第二点中讲到!
然后就是不能忘了必需的包:commons-logging.jar&log4j.jar
#等号后面是别名,要在记录日志的地方用
log4j.rootLogger=ALL,CONSOLE,FILE,ROLLING_FILE,MAIL,A1,DATABASE
###################
# Console Appender 在控制台输出的
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.Threshold=INFO
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
#####################
# File Appender 输出到文件中
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.Threshold=ERROR
log4j.appender.FILE.File=c\:\\a\\file.html
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# Rolling File 回滚文件
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=DEBUG
log4j.appender.ROLLING_FILE.File=c\:\\a\\rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=5KB
#备份文件个数
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
########################
# DailyRollingFile 每日产生一个日志文件
#######################
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=c:\\a\\SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.HTMLLayout
########################
# SMTP Appender(发送到email-需要用户名和密码,还要有javamail.jar,dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar包)
#######################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
### 错误级别
##log4j.appender.MAIL.Threshold=FATAL
## 缓存文件大小,日志达到10K时发送Email
#log4j.appender.MAIL.BufferSize=10
#log4j.appender.MAIL.From=wisdom_xw@163.com
#log4j.appender.MAIL.SMTPHost=smtp.163.com
#log4j.appender.MAIL.SMTPUsername=wisdom_xw
#log4j.appender.MAIL.SMTPPassword=密码
### 邮件主题
#log4j.appender.MAIL.Subject=Messsage From LOG4J
#log4j.appender.MAIL.To=XXXXXX@qq.com
#注意:下面的layout=后面的值要是women写的解决转码问题的类,eg:com.shu.util.MyPattern
#log4j.appender.MAIL.layout=com.shu.util.MyPattern
#log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n
##邮件中,内容包含中文的处理方式
#public class MyPatternLayout extends PatternLayout {
# @Override
# public String getContentType() {
# return "text/html;CHARSET=utf8"; //设定字符集 #
# }
#}
#当布局是HTML时(该类位于com.shu.util.MyPattern)
#public class MyPattern extends HTMLLayout{
# @Override
# public String getContentType() {
# return "text/html;CHARSET=utf-8"; //设定字符集 #
# }
#}
########################
# JDBC Appender 放入到DBSM中(需要jdbc驱动)(注意,系统默认没有处理单引号问题,晕~突然想不起这个是怎么处理的了)
#######################
log4j.appender.DATABASE=BPSJDBCAppender
log4j.appender.DATABASE.Threshold=all
log4j.appender.DATABASE.URL=jdbc:sqlserver://localhost:1433;databaseName=testdb
log4j.appender.DATABASE.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
log4j.appender.DATABASE.user=sa
log4j.appender.DATABASE.password=123456
log4j.appender.DATABASE.sql=INSERT INTO error_msg VALUES ('%d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#只记得要写这个方法!
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.spi.LoggingEvent;
#public class BPSLoggingEvent extends LoggingEvent {
# public BPSLoggingEvent(String fqnOfCategoryClass, Category logger, Priority level, Object message, Throwable throwable) {
# super(fqnOfCategoryClass, logger, level, message, throwable);
# // TODO Auto-generated constructor stub
# }
# public String getThreadName() {
# // TODO Auto-generated method stub
# String thrdName=super.getThreadName();
# if(thrdName.indexOf("'")!=-1){
# thrdName=thrdName.replaceAll("'", "''");
# }
# return thrdName;
# }
# public String getRenderedMessage() {
# String msg=super.getRenderedMessage();
# if(msg.indexOf("'")!=-1){
# msg=msg.replaceAll("'", "''");
# }
# return msg;
# }
#}
#还有这个方法
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.spi.LoggingEvent;
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.jdbc.JDBCAppender;
#import org.apache.log4j.spi.LoggingEvent;
#
#public class BPSJDBCAppender extends JDBCAppender {
# protected String getLogStatement(LoggingEvent event) {
# String fqnOfCategoryClass = event.fqnOfCategoryClass;
# Category logger = Category.getRoot();
# Priority level = event.level;
# Object message = event.getMessage();
# Throwable throwable = null;
# BPSLoggingEvent bEvent = new BPSLoggingEvent(fqnOfCategoryClass,
# logger, level, message, throwable);
# return super.getLogStatement(bEvent);
# }
#}
二,log4j.properties中各个参数的讲解
//-----------------------大体上------------------------------
#log4j.rootLogger=输出级别(all<debug<info<error),输出位置(动态参数)
#设置输出具体的位置
#log4j.appender.别名=ConsoleAppender(控制台)\FileAppender(文件中)
#DailyRollingFileAppender(每日一个文件)\SMTPAppender(发送邮件)\BPSJDBCAppender(数据库中)
#设置输出级别
#log4j.appender.别名.Threshold=可选值(all<debug<info<error)
#设置输出文件的格式
#log4j.appender.别名.layout=PatternLayout(普通文本格式)、HTMLLayout(HTML格式)
#设置日志的具体内容(使用特殊符号代替,详细见书:p174)
#log4j.appender.ABC.layout.ConversionPattern=%F %L %d等等
//--------------------------------------------------------------
输出级别的种类
ERROR、WARN、INFO、DEBUG
ERROR 为严重错误 主要是程序的错误
WARN 为一般警告,比如session丢失
INFO 为一般要显示的信息,比如登录登出
DEBUG 为程序的调试信息
配置日志信息输出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
1.org.apache.log4j.ConsoleAppender(控制台)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
控制台选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
FileAppender 选项
Threshold=DEBUF:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
RollingFileAppender 选项
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm: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
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉
三,使用java代码记录日志
[代码中使用]
public class TestLog4j {
public static void main(String[] args) {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
Logger logger = Logger.getLogger(TestLog4j. class );
logger.debug( " debug " );
logger.error( " error " );
....
}
}
<!--
Author:Lovingshu's Forever
Date:2011-11-02 22:33
Remark:I've nothing to say~but there is someone leave my life and never back~
-->
Struts Chapter 9 Log4j(系统运行时的状态记录日志)
最新推荐文章于 2024-09-21 09:05:37 发布