log4j日志组件
来源:互联网 发布:java中interface用法 编辑:程序博客网 时间:2024/05/17 19:14
Log4j日志操作组件:
特点:
通过配置多文件灵活配置,不需要过修改代码。
控制日志输出:控制台,文件,数据库,甚至socket等。package:
log4j-1.2.8.jarconfig:
log4j.properties
或log4j.xml
使用步骤:
1.导包:
log4j-x.x.x.jar导入项目中。
commons-logging.jar导入项目中 [可选]。
2.配置:
配置日志记录方式[log4j.properties或log4j.xml],放在项目的src文件夹的根目录下。
3.加载配置:
启动时加载配置文件:
a.加载xml:
DOMConfigurator.configure(url);b.加载properties:PropertyConfigurator.configure(url);*url=".\log4j.properties"或".\log4j.xml"
4.记录器:
给需要日志的类配置Logger记录器:
public class MyClass{static Logger log = Logger.getLogger(MyClass.class.getName());...}
5.开始记录:
记录方法,分别对应配置文件中的数个记录优先级,下文中将有详细介绍:public void debug(Object message);public void info(Object message);public void warn(Object message);public void error(Object message);public void fatal(Object message);实际例子:try{...log.debug(someMsg);}catch(Exception e){log.error(e.getMessage());log.fatal(e.getCause().getMessage());}
根logger配置:
#log4j.properties#set log level# #设置log等级#log4j.rootLogger=[记录优先级],[输出名1],[输出名2]...
实际例子:
log4j.rootLogger=DEBUG,stdout,filelog4j.rootLogger=INFO,myOut1,myOut2 #自定义输出名记录优先级:
顺序:
按信息的全面性排列,前面的相当于后面的子集:
OFF < FATAL < ERROR < WARN < INFO < DEBUG < ALL
原则:
不输出更高优先级的信息,如定义了优先级为INFO,则DEBUG等级(更高,更全面)的log将不输出。
输出名:
可以随意定义,如stdout, file等,其所代表的输出方式在后面两部分配置中设置。
输出布局配置:
log4j.appender.[输出名].layout=[输出布局类型]实际例子:
log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.myOut1.layout=org.apache.log4j.SimpleLayout
可选布局类型:
HTMLLayout:
org.apache.log4j.HTMLLayout:HTML表格形式
特有选项:
LocationInfo=true #默认为false,输出java文件名及行号Title=my title #默认为Log4J Log Messages
XMLLayout:
org.apache.log4j.XMLLayout:XML表格形式
特有选项:
LocationInfo=true #默认为false,输出java文件名及行号
PatternLayout:
org.apache.log4j.PatternLayout:灵活指定输出格式
特有选项:
ConversionPattern=%m %n #自定义输出布局格式#参数:# %m java代码指定的消息【log.error(指定内容);】# %p 优先级,DEBUG,INFO,FATAL等# %r 启动日志记录到输出这条信息时的毫秒数# %c 所在类的类名# %t 当前线程名# %n 换行# %d{yyyyMMdd HH:mm:ss,SSS} 日期,SSS为毫秒# %l 类名+线程+java代码行数# %F log产生时所在文件名# - 指定左对齐,默认右对齐,如%-20c# . 指定右对齐,如%20.c# %[数字][参数] 设置参数最小长度,不足则补空格,如%20c# %[数字][.][数字][参数] 设置参数最小及最大长度,不足则补空格,超出则截掉左边的多余部分,如%20.30c
输出目的地配置:
输出目的地类型:
log4j.appender.[输出名]=[输出类型]
实际例子:
log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.myOut1=org.apache.log4j.FileAppender可选类型:
通用选项:
Threshold=WARN #指定日志信息的输出最低优先级ImmediateFlush=true #默认为true,立即输出
ConsoleAppender:
org.apache.log4j.ConsoleAppender:控制台
特有选项:
Target=System.err #默认为System.out
FileAppender:
org.apache.log4j.FileAppender:log文件
特有选项:
File=mylog.txt #指定输出文件位置Append=false #默认为true,追加模式;false为每次覆盖
DailyRollingFileAppender:
org.apache.log4j.DailyRollingFileAppender:每隔一段时间产生一个新log文件
特有选项:
File=mylog.txt #指定输出文件位置#从第二个文件起文件名为mylog.txt.1 mylog.txt.2 ...Append=false #默认为true,追加模式;false为每次覆盖DatePattern=.yyyy-ww #每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分,对应的格式如下:# .yyyy-MM: 每月# .yyyy-ww: 每周# .yyyy-MM-dd: 每天# .yyyy-MM-dd-a: 每天两次# .yyyy-MM-dd-HH: 每小时# .yyyy-MM-dd-HH-mm: 每分钟
RollingFileAppender:
org.apache.log4j.RollingFileAppender:依次产生指定大小的log文件,或通过socket发送
特有选项:
写入log文件:
File=mylog.txt #指定输出文件位置#从第二个文件起文件名为mylog.txt.1 mylog.txt.2 ...Append=false #默认为true,追加模式;false为每次覆盖MaxFileSize=100KB #每个文件的最大大小,单位可以为KB,MB,GBMaxBackupIndex=2 #最大的滚动文件数目,设置为2时日志只能在mylog.txt与mylog.txt.1之间输出写入socket:
RemoteHost=localhost #套接字hostport=5001 #套接字端口LocationInfo=true #产生日志信息的java文件位置,行号等JDBCAppender:
org.apache.log4j.JDBCAppender:写入数据库
特有选项:
Driver=com.mysql.jdbc.Driver #JDBC DriverURL=jdbc:mysql://localhost:3306/someDB #数据库连接URLuser=someUserName #用户名password=noUserPwd #密码sql=INSERT INTO log4jtable VALUES('%d{yyyy-MM-dd}') #SQL语句
WriterAppender:
org.apache.log4j.WriterAppender:流形式发送log到指定位置
配置实例:
写入控制台:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,myConsole#Appender Config,配置Appender#log4j.appender.myConsole=org.apache.log4j.ConsoleFileAppenderlog4j.appender.myConsole.Threshold=WARNlog4j.appender.myConsole.ImmediateFlush=truelog4j.appender.myConsole.Target=System.err#Layout Config,配置布局#log4j.appender.myConsole.layout=org.apache.log4j.PatternLayoutlog4j.appender.myConsole.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n写入文件:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,myFile#Appender Config,配置Appender#log4j.appender.myFile=org.apache.log4j.FileAppenderlog4j.appender.myFile.Threshold=WARNlog4j.appender.myFile.ImmediateFlush=truelog4j.appender.myFile.File=d:/loginfo/somelog.txtlog4j.appender.myFile.Append=false#Layout Config,配置布局#log4j.appender.myFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.myFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n写入滚动文件:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,myRFile#Appender Config,配置Appender#log4j.appender.myRFile=org.apache.log4j.RollingFileAppenderlog4j.appender.myRFile.Threshold=WARNlog4j.appender.myRFile.ImmediateFlush=truelog4j.appender.myRFile.File=d:/loginfo/myrlog.txtlog4j.appender.myDRFile.MaxFileSize=100KBlog4j.appender.myDRFile.MaxBackupIndex=5log4j.appender.myRFile.Append=true#Layout Config,配置布局#log4j.appender.myRFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.myRFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n写入按时滚动文件:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,myDRFile#Appender Config,配置Appender#log4j.appender.myDRFile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.myDRFile.Threshold=WARNlog4j.appender.myDRFile.ImmediateFlush=truelog4j.appender.myDRFile.File=d:/loginfo/myrlog.txtlog4j.appender.myDRFile.Append=truelog4j.appender.myDRFile.DatePattern=.yyyy-MM-dd-HH#Layout Config,配置布局#log4j.appender.myDRFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.myDRFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n写入套接字:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,mySocket#Appender Config,配置Appender#log4j.appender.mySocket=org.apache.log4j.RollingFileAppenderlog4j.appender.mySocket.RemoteHost=localhostlog4j.appender.mySocket.Port=5001log4j.appender.mySocket.LocationInfo=true#Layout Config,配置布局#log4j.appender.mySocket.layout=org.apache.log4j.PatternLayoutlog4j.appender.mySocket.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n写入数据库:
#Root Logger Config,配置根Logger#log4j.rootLogger=INFO,myDB#Appender Config,配置Appender#log4j.appender.myDB=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.myDB.URL=jdbc:mysql://localhost:3306/someDBlog4j.appender.myDB.driver=com.mysql.jdbc.Driverlog4j.appender.myDB.user=rootlog4j.appender.myDB.password=123456log4j.appender.myDB.sql=INSERT INTO logtable VALUES('%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n')#Layout Config,配置布局#log4j.appender.myDB.layout=org.apache.log4j.PatternLayoutlog4j.appender.myDB.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
MDC:
作用:
类似于Servlet的ServletContext,MDC在java代码和log4j配置文件之间能够存储和传递全局变量,存储的格式为Map。
方法:
log4j MDC提供如下三个静态方法:public static void put(Object key, Object value);public static void remove(Object key);public static void get(Object key);
实例:
以下面这个例子来说明如何将java代码里的变量传递到log4j配置文件中://user.javapublic class User{private String userName;private String userId;private String userPwd;public User(String userName, String userId, String userPwd){this.userName = userName;this.userId = userId;this.userPwd = userPwd;}public String getUserName(){return userName;}public String getUserId(){return userId;}public String getUserPwd(){return userPwd;}}//Test.javapublic static void main(String[] args){public static final Logger logger = Logger.getLogger(this.getClass().getName());User user = new User("Someone","SomeId","NoPwd");MDC.put("userName",user.getUserName());...}//log4j.properties...log4j.appender.someappender.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss SSS} Msg:%x{userName}
- log4j日志组件
- Log4J日志组件
- Log4J日志组件
- Log4J日志组件
- log4j日志组件
- Log4j日志组件解析
- 日志组件log4j详解
- Log4j日志组件
- Spring整合log4j日志组件
- Spring整合log4j日志组件
- java中的日志组件-log4j
- 日志组件 commons-logging、slf4j、log4j
- 【日志记录】log4j组件的应用
- log4j日志组件基本用法及原理
- log4j 和commons-logging 两个日志组件
- log4j--日志组件的配置详解
- java日志组件(3):log4j 1
- 日志组件log4j和commons-logging(一)
- timus1982. Electrification Plan---最小生成树
- 代理模式
- 润乾V5实现关联过滤多选功能
- String方法摘要
- 移植Linux内核和文件系统,超级终端输出出现“[\u@\h \W]#”
- log4j日志组件
- rails 4.0 中 i18n 进行 model 中文化
- Linux的Service之解析
- Python中的random模块
- android SDK安装Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml出错
- Hbase 三维有序存储
- java程面试中一些问题
- ezvpn 网络拓展模式配置实例
- find command in UNIX