配置方法:
导入log4j包。
log4j.properties文件内容
# set log levels # log4j.rootLogger = debug , stdout log4j.logger.newLoger = stdout,debug,info,warn,error,MAIL # 输出到控制台 # log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.Threshold = DEBUG log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] [%5p] [%C:%L] -> %m%n # 输出到文件:DEBUG # log4j.appender.debug = org.apache.log4j.DailyRollingFileAppender log4j.appender.debug.File =log/debug.txt log4j.appender.debug.Append = false log4j.appender.debug.Threshold = DEBUG log4j.appender.debug.layout = org.apache.log4j.PatternLayout log4j.appender.debug.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] [%5p] [%C:%L] -> %m%n # 输出到文件:INFO # log4j.appender.info = org.apache.log4j.DailyRollingFileAppender log4j.appender.info.File =log/info.txt log4j.appender.info.Append = false log4j.appender.info.Threshold = INFO log4j.appender.info.layout = org.apache.log4j.PatternLayout log4j.appender.info.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] [%5p] [%C:%L] -> %m%n # 输出到文件:WARN # log4j.appender.warn = org.apache.log4j.DailyRollingFileAppender log4j.appender.warn.File =log/warn.txt log4j.appender.warn.Append = false log4j.appender.warn.Threshold = WARN log4j.appender.warn.layout = org.apache.log4j.PatternLayout log4j.appender.warn.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] [%5p] [%C:%L] -> %m%n # 输出到文件:ERROR # log4j.appender.error = org.apache.log4j.DailyRollingFileAppender log4j.appender.error.File =log/error.txt log4j.appender.error.Append = false log4j.appender.error.Threshold = ERROR log4j.appender.error.layout = org.apache.log4j.PatternLayout log4j.appender.error.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}] [%5p] [%C:%L] -> %m%n # 邮件发送:MAIL # #发送mail需下载及引入activation.jar和mail.jar log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=ERROR log4j.appender.MAIL.BufferSize=512 log4j.appender.MAIL.From=luweifeng1983@126.com log4j.appender.MAIL.SMTPUsername=luweifeng1983 log4j.appender.MAIL.SMTPPassword=** log4j.appender.MAIL.SMTPHost=smtp.126.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=luweifeng@sz.tom.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
测试代码:
package com.log; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class TestLog { static Logger logger = Logger.getLogger(TestLog.class); /** * @param args */ public static void main(String[] args) { PropertyConfigurator.configure("./config/log4j.properties"); Logger logger = Logger.getLogger("newLoger"); logger.debug("debug..."); logger.info("info...."); logger.warn("warn....."); logger.error("error出错啦..."); } }
上面配置中控制台只输出信息:
[2016-08-16 14:06:37] [DEBUG] [com.log.TestLog:14] -> debug...
[2016-08-16 14:06:37] [ INFO] [com.log.TestLog:15] -> info....
[2016-08-16 14:06:37] [ WARN] [com.log.TestLog:16] -> warn.....
[2016-08-16 14:06:37] [ERROR] [com.log.TestLog:17] -> error出错啦...
以下进行error日志记录保存到数据库,采用xml配置文件:
log4j.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="debug"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" /> </layout> </appender> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="c:/framework/log/all/all.log" /> <param name="append" value="true" /> <param name="maxFileSize" value="10MB" /> <param name="maxBackupIndex" value="100" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> </layout> </appender> <appender name="info" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="c:/framework/log/info/info.log" /> <param name="Encoding" value="GB2312" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.bak'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value=" %d{ISO8601} [%c]- %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> <param name="acceptOnMatch" value="true" /> </filter> </appender> <appender name="error" class="org.apache.log4j.DailyRollingFileAppender"> <param name="threshold" value="error" /> <param name="File" value="c:/framework/log/error/error.log" /> <param name="Encoding" value="GB2312" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.bak'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value=" %d{ISO8601} [%c]- %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="error" /> <param name="LevelMax" value="error" /> <param name="acceptOnMatch" value="true" /> </filter> </appender> <appender name="debug" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="c:/framework/log/debug/debug.log" /> <param name="Encoding" value="GB2312" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.bak'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value=" %d{ISO8601} [%c]- %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="debug" /> <param name="LevelMax" value="debug" /> <param name="acceptOnMatch" value="true" /> </filter> </appender> <appender name="dberror" class="org.apache.log4j.jdbc.JDBCAppender"> <param name="URL" value="jdbc\:oracle\:thin\:@//10.101.2.19\:1521/pdbqmytcis" /> <param name="driver" value="oracle.jdbc.driver.OracleDriver"/> <param name="user" value="qmytcis"/> <param name="password" value="qmytcis123"/> <param name="sql" value="INSERT INTO ERROR_LOG (ID,ERROR_TIME,ERROR_THREAD,ERROR_CLASS,ERROR_MSG) VALUES (SEQ_ERROR_LOG.NEXTVAL,'%d{yyyy-MM-dd HH\:mm\:ss}', '[YTCIS_WEB]%t', '%l', '%.4000m') "/> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="error" /> <param name="LevelMax" value="error" /> <param name="acceptOnMatch" value="true" /> </filter> </appender> <appender name="mydberror" class="com.log.MyJDBCAppender"> <param name="URL" value="jdbc\:oracle\:thin\:@//10.101.2.19\:1521/pdbqmytcis" /> <param name="driver" value="oracle.jdbc.driver.OracleDriver"/> <param name="user" value="qmytcis"/> <param name="password" value="qmytcis123"/> <param name="sql" value="INSERT INTO ERROR_LOG (ID,ERROR_TIME,ERROR_THREAD,ERROR_CLASS,ERROR_MSG) VALUES (SEQ_ERROR_LOG.NEXTVAL,'%d{yyyy-MM-dd HH\:mm\:ss}', '[YTCIS_WEB]%t', '%l', '%.4000m') "/> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="error" /> <param name="LevelMax" value="error" /> <param name="acceptOnMatch" value="true" /> </filter> </appender> <!-- 下面是打印mybatis语句的配置--> <logger name="com.gov.customs" additivity="false"> <level value="DEBUG" /> <appender-ref ref="debug"/> <appender-ref ref="info"/> <appender-ref ref="error"/> <appender-ref ref="CONSOLE"/> </logger> <logger name="java.sql" additivity="true"> <level value="DEBUG" /> <appender-ref ref="CONSOLE"/> </logger> <root> <level value="DEBUG" /> <!-- <appender-ref ref="CONSOLE" /> <appender-ref ref="debug" /> <appender-ref ref="FILE" /> <appender-ref ref="info" /> <appender-ref ref="error" /> <appender-ref ref="dberror" /> --> <appender-ref ref="mydberror" /> </root> </log4j:configuration>
因为日志内容可能有引号等字符导致入库失败,所以需要进行以下处理:
MyJDBCAppender类
package com.log; import org.apache.log4j.Category; import org.apache.log4j.Priority; import org.apache.log4j.jdbc.JDBCAppender; import org.apache.log4j.spi.LoggingEvent; public class MyJDBCAppender 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; MyLoggingEvent bEvent=new MyLoggingEvent(fqnOfCategoryClass,logger,level,message,throwable); bEvent.setEvent(event); return super.getLogStatement(bEvent); } }
MyLoggingEvent类
package com.log; import org.apache.log4j.Category; import org.apache.log4j.Priority; import org.apache.log4j.spi.LoggingEvent; public class MyLoggingEvent extends LoggingEvent { private static final long serialVersionUID = 1L; private LoggingEvent event = null; public MyLoggingEvent(String fqnOfCategoryClass, Category logger, Priority level, Object message, Throwable throwable) { super(fqnOfCategoryClass, logger, level, message, throwable); } public String getThreadName() { String thrdName=super.getThreadName(); if(thrdName.indexOf("'")!=-1){ thrdName=thrdName.replaceAll("'", "''"); } return thrdName; } public String getRenderedMessage() { String msg=super.getRenderedMessage(); String throwMsgs = ""; String [] throwMsg = event.getThrowableStrRep(); if (throwMsg != null) { StringBuffer buf = new StringBuffer(); for(int i = 0; i < throwMsg.length; i++) { buf.append(throwMsg[i]); buf.append("\r\n"); } throwMsgs = buf.toString(); } msg = msg + "\r\n" + throwMsgs; if(msg.indexOf("'")!=-1){ msg=msg.replaceAll("'", "''"); } if(msg.length()>4000) msg = msg.substring(0,4000); return msg; } public LoggingEvent getEvent() { return event; } public void setEvent(LoggingEvent event) { this.event = event; } }
测试类TestLog
package com.log; import java.io.IOException; import java.io.InterruptedIOException; import java.io.LineNumberReader; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; import java.net.URL; import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.xml.DOMConfigurator; import com.other.Other; public class TestLog { static Logger logger = Logger.getLogger(TestLog.class); /** * @param args */ public static void main(String[] args) { try { testXml(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // Other o = new Other(); // o.print(); } public static void testProperties(){ PropertyConfigurator.configure("./config/log4j.properties"); Logger logger = Logger.getLogger("newLoger"); logger.debug("debug..."); logger.info("info...."); logger.warn("warn....."); logger.error("error出错啦..."); } public static void testXml() throws Exception{ // final URL url = TestLog.class.getResource("log4j.xml"); URL url = new URL("./config/log4j.xml"); DOMConfigurator.configure(url); int c; try { int a = 3; int b = 0; c = a / b; String s = "3232323".substring(0,2); } catch (Exception e) { e.printStackTrace(); //render(e); logger.error("error出错啦...",e); } } public static String[] render(final Throwable throwable) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); try { throwable.printStackTrace(pw); } catch(RuntimeException ex) { } pw.flush(); LineNumberReader reader = new LineNumberReader( new StringReader(sw.toString())); ArrayList lines = new ArrayList(); try { String line = reader.readLine(); while(line != null) { lines.add(line); line = reader.readLine(); } } catch(IOException ex) { if (ex instanceof InterruptedIOException) { Thread.currentThread().interrupt(); } lines.add(ex.toString()); } String[] tempRep = new String[lines.size()]; lines.toArray(tempRep); return tempRep; } }
ORACLE数据库表脚本如下:
-- Create table create table ERROR_LOG ( ID NUMBER, ERROR_TIME VARCHAR2(50), ERROR_THREAD VARCHAR2(500), ERROR_CLASS VARCHAR2(500), ERROR_MSG VARCHAR2(4000) ); create sequence SEQ_ERROR_LOG minvalue 1 start with 1 increment by 1;
运行测试类,记录错误日志内容
具体见附件包。
相关推荐
log4j 详细配置 log4j 详细配置 log4j 详细配置 log4j 详细配置
#### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...
Log4j作为Java领域广泛应用的日志框架,提供了强大的日志记录功能和灵活的配置。本文将深入探讨log4j的配置以及配置文件的详解。** 首先,我们要理解什么是`log4j.properties`文件。这是log4j框架的配置文件,使用...
### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...
### Log4j配置与加载方法详解 Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地...
Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...
四、在 Maven 项目中引入 Log4j 依赖 在 Maven 项目中,需要引入 Log4j 依赖项,以便使用 Log4j。下面是一个基本的 Maven 依赖项配置: ``` <groupId>log4j <artifactId>log4j <version>1.2.16 ``` 这个配置...
Log4j2 配置模板学习笔记 Log4j2 是 Java 语言中一种流行的日志记录工具,它提供了灵活的日志记录管理功能。下面我们将学习 Log4j2 配置模板的使用和配置。 引入 Log4j2 依赖 在使用 Log4j2 之前,需要在 Maven ...
### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...
### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...
在压缩包中,还包含了一份名为`log4j.properties`的配置文件。这是Log4j使用的一种配置格式,基于Java Properties格式。配置文件决定了日志信息如何输出、输出到哪里,以及日志的级别等关键设置。 **三、Log4j配置...
标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...
下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来比较Log4j和Log4j2的区别。 配置文件类型 Log4j通过一个.properties文件作为主配置文件,而Log4j2则弃用了这种方式,采用的是.xml、.json或者....
log4j2配置,文件分割,自动清除等相关配置。
《深入理解Log4j及其配置文件》 在Java开发领域,日志管理是不可或缺的一部分,它可以帮助开发者跟踪程序运行状态,排查错误,优化性能。Log4j,作为Apache的一个开源项目,是Java中最广泛使用的日志框架之一。本文...
### Log4J 全能配置文件详解 #### 一、概述 Log4J是一款非常流行的Java日志框架,被广泛应用于各种规模的应用程序中。它提供了灵活的日志记录机制,可以将日志输出到不同的目的地,如控制台、文件、数据库等,并且...
Log4j2 结合 Slf4j 配置使用 Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将...
### log4j.properties配置文件详解 #### 一、概述 `log4j.properties`是Apache Log4j框架中用于配置日志记录行为的核心文件之一。通过这个文件,开发者可以定义日志消息的输出方式(例如控制台或文件)、日志级别...