1. 日志输出到文件
默认Log4j日志输出到控制台,也可以修改到其他输出源,Log4j支持多方向输出,可以同时设置输出控制台和文件,只不过在配置文件中需要配置两份Appender
日志文件输出配置项:
#配置appender输出方式 log4j.appender.自定义名=org.apache.log4j.FileAppender #指定文件输出位置和文件名 log4j.appender.自定义名.file=文件地址 #输出字符编码 log4j.appender.自定义名.encoding=UTF-8
例:多方向输出到控制台和文件中
① 配置文件
#1.控制台输出配置 #appender输出方式 log4j.appender.myconsole=org.apache.log4j.ConsoleAppender #输出的格式 log4j.appender.myconsole.layout=org.apache.log4j.PatternLayout #具体的PatternLayout格式 log4j.appender.myconsole.layout.conversionPattern=[%p]%r %c %t %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n #2.文件输出配置 log4j.appender.myfile=org.apache.log4j.FileAppender #输出格式 log4j.appender.myfile.layout=org.apache.log4j.SimpleLayout #文件输出 log4j.appender.myfile.file=D:\\mylog4j.log #文件编码 log4j.appender.myfile.encoding=UTF-8 #配置根节点 log4j.rootLogger=trace,myconsole,myfile
② 代码
@Test public void test1(){ Logger logger = Logger.getLogger(Log4jTest1.class); logger.trace("输出trace日志等级"); logger.debug("输出debug日志等级"); logger.info("输出info日志等级"); logger.warn("输出warn日志等级"); logger.error("输出error日志等级"); logger.fatal("输出fatal日志等级"); }
③ 日志输出
2. 日志文件大小拆分
将日志文件输出到文件,但日志太多时,不方便管理,这时可以对文件进行进行处理输出,Log4j提供了RollingFileAppender进行文件大小拆分
配置项:
#配置appender输出方式 log4j.appender.自定义名=org.apache.log4j.RollingFileAppender #指定文件输出位置和文件名 log4j.appender.自定义名.file=文件地址 #输出字符编码 log4j.appender.自定义名.encoding=UTF-8 #指定日志文件内容的大小(超过这个大小就对日志文件进行拆分) log4j.appender.自定义名称.maxFileSize= #指定日志文件的数量 log4j.appender.自定义名称.maxBackupIndex=
解析:
- 日志大小:当存储文件大于指定大小就会进行日志切分,重新创建一个日志文件进行存储
- 日志数量:当指定了日志数量,日志文件超出大小时文件的拆分要少于指定日志数量,当超过日志数量时,就对最早生成的日志文件进行覆盖
例:配置RollingFileAppender
① 配置文件
log4j.appender.myrollingfile=org.apache.log4j.RollingFileAppender #文件输出位置 log4j.appender.myrollingfile.file=D:\\mylog4j.log #输出格式 log4j.appender.myrollingfile.layout=org.apache.log4j.SimpleLayout #文件编码 log4j.appender.myrollingfile.encoding=UTF-8 #指定日志文件内容大小 log4j.appender.myrollingfile.maxFileSize=1MB #指定拆分日志文件的最大数量 log4j.appender.myrollingfile.maxBackupIndex=5 #配置根节点 log4j.rootLogger=trace,myrollingfile
② 代码
@Test public void test1(){ Logger logger = Logger.getLogger(Log4jTest1.class); for(int a=0;a<100000;a++) { logger.trace("输出trace日志等级"); logger.debug("输出debug日志等级"); logger.info("输出info日志等级"); logger.warn("输出warn日志等级"); logger.error("输出error日志等级"); logger.fatal("输出fatal日志等级"); } }
③ 结果
3. 日志按时间进行拆分
Log4j使用DailyRollingFileAppender对日志文件按照时间进行拆分
配置项:
#指定Appender log4j.appender.自定义名=org.apache.log4j.DailyRollingFileAppender #指定文件输出位置和文件名 log4j.appender.自定义名.file=文件地址 #输出字符编码 log4j.appender.自定义名.encoding=UTF-8 #时间拆分模式 log4j.appender.自定义名.datePattern='.'yyyy-MM-dd HH-mm-ss
注:yyyy-MM-dd HH-mm-ss是按秒进行拆分,yyyy-MM-dd是按天进行拆分,以此类推
例:使用DailyRollingFileAppender对文件按时间进行拆分
① 配置项
#指定Appender log4j.appender.myDailyrollingfile=org.apache.log4j.DailyRollingFileAppender #指定文件输出位置和文件名 log4j.appender.myDailyrollingfile.file=D:\\mylog4j.log ##输出格式 log4j.appender.myDailyrollingfile.layout=org.apache.log4j.SimpleLayout #输出字符编码 log4j.appender.myDailyrollingfile.encoding=UTF-8 #时间拆分模式 log4j.appender.myDailyrollingfile.datePattern='.'yyyy-MM-dd HH-mm-ss #配置根节点myconsole,myfile log4j.rootLogger=trace,myDailyrollingfile
注:一般正常的是按天或者周进行拆分,这里是按照秒拆分
② 代码
@Test public void test1(){ Logger logger = Logger.getLogger(Log4jTest1.class); for(int a=0;a<100000;a++) { logger.trace("输出trace日志等级"); logger.debug("输出debug日志等级"); logger.info("输出info日志等级"); logger.warn("输出warn日志等级"); logger.error("输出error日志等级"); logger.fatal("输出fatal日志等级"); } }
③ 输出文件
4. 日志数据库持久化
Log4j使用JDBCAppender日志持久化到数据库
导入mavan依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.14</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
创建数据库表结构:根据具体的业务需求创建
CREATE TABLE `tbl_log`( `id` BIGINT(20) AUTO_INCREMENT PRIMARY KEY COMMENT '主键', `name` varchar(255) NOT NULL COMMENT '项目名称', `createTime` varchar(255) NOT NULL COMMENT '创建时间', `level` varchar(255) COMMENT '日志级别', `category` VARCHAR(255) DEFAULT NULL COMMENT '全限定类名', `filename` VARCHAR(255) DEFAULT NULL COMMENT '文件名称', `message` VARCHAR(255) DEFAULT NULL COMMENT '日志消息' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='log4j日志持久化表';
JDBCAppender配置项:
#配置Appender输出到数据库 log4j.appender.自定义名=org.apache.log4j.jdbc.JDBCAppender #数据库驱动 log4j.appender.自定义名.Driver=com.mysql.jdbc.Driver #数据库链接 log4j.appender.自定义名.URL=jdbc:mysql://localhost:3306/…… #账号密码 log4j.appender.自定义名.User= log4j.appender.自定义名.Password= #插入SQL log4j.appender.自定义名.Sql=
例:
① 配置文件
#配置Appender输出到数据库 log4j.appender.myjdbcappender=org.apache.log4j.jdbc.JDBCAppender log4j.appender.myjdbcappender.Driver=com.mysql.jdbc.Driver log4j.appender.myjdbcappender.URL=jdbc:mysql://localhost:3306/wql log4j.appender.myjdbcappender.User=root log4j.appender.myjdbcappender.Password=123 log4j.appender.myjdbcappender.Sql= INSERT INTO tbl_log(`name`,`createTime`,`level`,`category`,`filename`,`message`) values('project_log','%d{yyyy-MM-dd HH:mm:ss}','%p','%c','%F','%m')
② 代码
@Test public void test1(){ Logger logger = Logger.getLogger(Log4jTest1.class); logger.trace("输出trace日志等级"); logger.debug("输出debug日志等级"); logger.info("输出info日志等级"); logger.warn("输出warn日志等级"); logger.error("输出error日志等级"); logger.fatal("输出fatal日志等级"); }
③ 数据库数据
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109