java使用日志文件log4j的方法:
1、 新建一个Java工程,导入Log4j包,pom文件中对应的配置代码如下:
<!-- log4j support -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2、resources目录下创建log4j.properties文件
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=/home/qi/logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /home/qi/logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=/home/admin/logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/home/admin/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
3、输出日志的例子如下
package com.java.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4JTest {
private static final Logger logger = LoggerFactory.getLogger(Log4JTest.class);
public static void main(String[] args) {
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}
4、输出结果
首先,控制台输入如下图所示:
② 如何用log4j输出多个自定义日志文件
轮袭log4j输出多个自定义日和伏志文件
如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?
先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志:
复制代码 代码如下唤桐携:
log4j.rootLogger=DEBUG, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:
复制代码 代码如下:
private static Log logger1 = LogFactory.getLog("mylogger1");
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.properties中配置如下:
复制代码 代码如下:
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))。
还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
log4j.additivity. mylogger1 = false
它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方了。
但是这种方式有个小缺陷,那就是打印的日志中类名只能是mylogger或者mylogger2。
2 动态配置路径
若程序需要的.日志路径需要不断的变化,而又不可能每次都去改配置文件,此时可以利用环境变量来解决。
log4j的配置如下:
复制代码 代码如下:
log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG
#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此时,在使用log打印日志之前,需要利用System定义日志的输出路径和文件名的环境变量:
复制代码 代码如下:
System.setProperty(“log.dir”, logDir);
System.setProperty(“log.info.file”, infoLogFileName);
System.setProperty(“log.debug.file”, debugLogFileName);
附:Pattern参数的格式含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2013-8-19- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
③ log4j2怎么输出日志到文件
、前提条件 系统必须使用LOG4J进行志管理否则效 系统必须包含mons-logging-xxx.jarlog4j-xxx.jar两JAR包XXX版本号 二、操作步骤 1、创建志表 要志持久化必须数据库创建张用存储志信息表表内字段志 主要属性包括:操作类执行打印间志级别志内容 CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL, CLASS VARCHAR2(200), METHOD VARCHAR2(100), CREATETIME DATE, LOGLEVEL VARCHAR2(50), MSG VARCHAR2(4000)) 存储类类全部路径所CLASS字段度需要比较 2、志管理配置 LOG4J主要两种配置文件.properties.xmlproperties文件基础讲 述关于XML文件配置相信家看完面介绍能轻松完 通LOG4J.PROPERTIES文件第行: log4j.rootLogger= XXX句控制志输想吧志输数据库 则需要XXX添加DBlog4j.rootLogger=INFO,stdout,Platform,db面 句志级别INFO信息输STDOUT,PLATFORMDB (DATABASE) 配置信息LOG4J知道用户想信息存入数据库接我要 配置数据库相关信息(包括缓存数据库连接信息执行SQL)配置信息: ###JDBCAppender log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender //配置选择使用JDBCAppender志信息存储数据库要做其操作自写类继承JDBCAppenderOK log4j.appender.db.BufferSize=1 //配置告诉LOG4J条志信息才存入数据库我1,说条查条显产环境影响系统性能 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver //配置告诉LOG4J做数据库存储所用驱 log4j.appender.db.URL=jdbc:oracle:thin:@:: //配置数据库连接URL用说都知道 log4j.appender.db.user=XXX log4j.appender.db.password=XXX //面两数据库连接用户名密码 log4j.appender.db.sql=insert into RESLOG (LogId,Class,Method,createTime,LogLevel,MSG) values (SQ_RESLOG_LOGID.Nextval,'%C','%M', to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd HH24:mi:ss'),'%p','%m') //配置告诉LOG4J吧志存储数据库用SQL语句SQ_RESLOG_LOGID.Nextval我建SEQUENCE;‘%C’志CLASS;‘%M’打印志执行类;‘%d’打印间支持格式化;‘%P’志级别包括INFO、DEBUG、ERROR等;‘%m’MSG志内容注意参数区写 log4j.appender.db.layout=org.apache.log4j.PatternLayout 通面配置现再启服务LOG4J自原存储.LOG文件信息同存储数据库
④ 如何使用log4j输出单个级别的log到指定文件
这种情况下,就需要debug、info、warn、error分别进行配置了。之后通过priority属性控制日志实际输出级别就可以。
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPElog4j:configurationPUBLIC"-//LOGGER""log4j.dtd">
<log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">
<!--Appenders-->
<appendername="console"class="org.apache.log4j.ConsoleAppender">
<paramname="Target"value="System.out"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}||||%p||||%m%n"/>
</layout>
</appender>
<!--输出debug日志-->
<appendername="debug.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/debug.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="debug"/>
<paramname="levelMax"value="debug"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--输出info日志-->
<appendername="info.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/info.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="info"/>
<paramname="levelMax"value="info"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--输出warn日志-->
<appendername="warn.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/warn.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="warn"/>
<paramname="levelMax"value="warn"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--输出error日志-->
<appendername="error.log"class="org.apache.log4j.DailyRollingFileAppender">
<paramname="File"value="d:/tmrpt/log/error.log"/>
<paramname="Append"value="true"/>
<paramname="encoding"value="UTF-8"/>
<paramname="DatePattern"value="yyyyMMddHH"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-d{yyyy-MM-ddHH:mm:ss,SSS}[%p][%c]-%m%n"/>
</layout>
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
<paramname="levelMin"value="error"/>
<paramname="levelMax"value="error"/>
<paramname="AcceptOnMatch"value="true"/>
</filter>
</appender>
<!--RootLogger-->
<root>
<!--priority配置输出日志级别-->
<priorityvalue="info"/>
<appender-refref="console"></appender-ref>
<appender-refref="info.log"/>
<appender-refref="debug.log"/>
<appender-refref="warn.log"/>
<appender-refref="error.log"/>
</root>
</log4j:configuration>
⑤ Java log4j 配置文件怎么写,可以输出log.info("")中的内容到指定目录的.log文件
log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=/usr/logs/mylog.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%c] %m%n
⑥ java工程中如何使用log4j输出指定路径日志文件,是java工程,不是web工程,谢谢
此文档放在项目编译文件.class相同的位置
### set log levels ###log4j.rootLogger = debug , stdout , D### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n### 输出到日志文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 保存异常信息到单独文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
配置获取方法:
PropertyConfigurator.configure( "D:\\Project Files\\myeclipse\\commontest\\bin\\log\\log4j\\log4j.properties" );
Logger log=Logger. getLogger(TestLog4j.class);
log.warn( "嘿嘿");
log.debug( "呜呜");
log.error( "错啦");
⑦ 将console中所有输出通过log4j输出到文件中
log4j.rootLogger=info,stdout,info,debug,error
log4j.logger.com.mybatis=info
log4j.logger.com.opensymphony.xwork2=info
log4j.logger.java.sql=debug
log4j.logger.org.apache.struts=info
log4j.logger.org.springframework=info
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=C:/logs/项目名称/debug.log
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = ERROR
log4j.appender.error.append=true
log4j.appender.error.File=C\:/logs/项目名称/error.log
⑧ Java怎样使用log4j2向不同文件中写入不同的日志
解决方法 1:
看看RoutingAppender,也许你能从这入手。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="DEBUG" name="MyApp" packages="">
<appenders>
<Routing name="Routing">
<Routes pattern="$${ctx:USERNAME}">
<Route>
<RollingFile name="user.log" append="true" fileName="users/${ctx:USERNAME}.txt"
filePattern="users/archive/${ctx:USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz">
<PatternLayout>
<pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
</RollingFile>
</Route>
</Routes>
</Routing>
</appenders>
<loggers>
<root level="TRACE">
<appender-ref ref="Routing" level="DEBUG" />
</root>
</loggers>
</configuration>