- 浏览: 5160245 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
Log4J日志输出到数据库中,且保存些用户自定义的参数,如用户ID,且配置仅输出指定级别的日志。
配置文件如下:
log4j.rootLogger=DEBUG,logfile,stdout
log4j.logger.SYSTEM = INFO,JDBC
#也可以使用包名或类名,这样可以用JAVA的class来初始化logger
log4j.logger.com.wallimn.test=INFO,JDBC
#不继承父appender的配置,如果取消注释,rootCategory指定的appender将不再输出
#log4j.additivity.SYSTEM=false
#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %5p [%c] - %m%n
#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=./wallimn.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d{yyyy MM dd HH:mm:ss} %5p [%c] - %m%n
#JDBC configure
log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender
#此处优先级高于log4j.logger.SYSTEM指定级别,
log4j.appender.JDBC.Threshold=INFO
log4j.appender.JDBC.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.JDBC.URL=jdbc:oracle:thin:@127.0.0.1:1521:swdb
log4j.appender.JDBC.user=scott
log4j.appender.JDBC.password=tiger
log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
log4j.appender.JDBC.sql=INSERT INTO XT_SYS_LOG(USERID,LOGTIME,LOGLEVEL,LOGACTION,MESSAGE)VALUES('%X{userId}',sysdate,'%p','%l','%m')
log4j.appender.JDBC.filter.F1=org.apache.log4j.varia.LevelRangeFilter
#只接收ERROR级别的日志,这是很有用的技术
#这功能在1.2.8版本时,不支持这样配置,好像仅支持XML方式配置,我试了好多次才发现这个问题
#可多个Filter组合共同限制
log4j.appender.JDBC.filter.F1.levelMin=ERROR
log4j.appender.JDBC.filter.F1.levelMax=ERROR
log4j.appender.JDBC.filter.F1.acceptOnMatch=true
建测试表的SQL:
create table xt_sys_log(
userid number,
logtime date,
logaction varchar2(100),
loglevel varchar2(100),
message varchar2(255));
测试类:
控制台输出:
2012-05-12 22:08:01,156 FATAL [SYSTEM] - test_fatal
2012-05-12 22:08:01,156 ERROR [SYSTEM] - test_Error
2012-05-12 22:08:01,421 WARN [SYSTEM] - test_warn
2012-05-12 22:08:01,421 INFO [SYSTEM] - test_Info
数据库记录查询:
SQL> select userid,loglevel,message from xt_sys_log;
USERID LOGLEVEL MESSAGE
---------- -------------------- --------------------
11 ERROR test_Error
注意:仅记录了一条日志。
配置文件如下:
log4j.rootLogger=DEBUG,logfile,stdout
log4j.logger.SYSTEM = INFO,JDBC
#也可以使用包名或类名,这样可以用JAVA的class来初始化logger
log4j.logger.com.wallimn.test=INFO,JDBC
#不继承父appender的配置,如果取消注释,rootCategory指定的appender将不再输出
#log4j.additivity.SYSTEM=false
#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %5p [%c] - %m%n
#logfile configure
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=./wallimn.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d{yyyy MM dd HH:mm:ss} %5p [%c] - %m%n
#JDBC configure
log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender
#此处优先级高于log4j.logger.SYSTEM指定级别,
log4j.appender.JDBC.Threshold=INFO
log4j.appender.JDBC.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.JDBC.URL=jdbc:oracle:thin:@127.0.0.1:1521:swdb
log4j.appender.JDBC.user=scott
log4j.appender.JDBC.password=tiger
log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
log4j.appender.JDBC.sql=INSERT INTO XT_SYS_LOG(USERID,LOGTIME,LOGLEVEL,LOGACTION,MESSAGE)VALUES('%X{userId}',sysdate,'%p','%l','%m')
log4j.appender.JDBC.filter.F1=org.apache.log4j.varia.LevelRangeFilter
#只接收ERROR级别的日志,这是很有用的技术
#这功能在1.2.8版本时,不支持这样配置,好像仅支持XML方式配置,我试了好多次才发现这个问题
#可多个Filter组合共同限制
log4j.appender.JDBC.filter.F1.levelMin=ERROR
log4j.appender.JDBC.filter.F1.levelMax=ERROR
log4j.appender.JDBC.filter.F1.acceptOnMatch=true
建测试表的SQL:
create table xt_sys_log(
userid number,
logtime date,
logaction varchar2(100),
loglevel varchar2(100),
message varchar2(255));
测试类:
package com.wallimn.test; import org.apache.log4j.Logger; import org.apache.log4j.MDC; import junit.framework.TestCase; public class Log4JTest extends TestCase { public void testLog1(){ Logger logger = Logger.getLogger("SYSTEM"); //Logger logger = Logger.getLogger(Log4JTest.class); MDC.put("userId", "11"); logger.fatal("test_fatal"); logger.error("test_Error"); logger.warn("test_warn"); logger.info("test_Info"); logger.debug("test_debug"); MDC.remove("userId"); } }
控制台输出:
2012-05-12 22:08:01,156 FATAL [SYSTEM] - test_fatal
2012-05-12 22:08:01,156 ERROR [SYSTEM] - test_Error
2012-05-12 22:08:01,421 WARN [SYSTEM] - test_warn
2012-05-12 22:08:01,421 INFO [SYSTEM] - test_Info
数据库记录查询:
SQL> select userid,loglevel,message from xt_sys_log;
USERID LOGLEVEL MESSAGE
---------- -------------------- --------------------
11 ERROR test_Error
注意:仅记录了一条日志。
评论
3 楼
wallimn
2013-09-05
没有用过,因此没有有看过LOG4J的源码,估计是用线程安全的变量来保存信息的吧。
2 楼
uuhorse
2013-09-04
你好!请问上述测试有没有应用于开发环境中?测试环境写一条数据是没有问题的,但在web环境里面,有很多用户访问的时候,MDC如何解决多线程问题,如何保证userId是当前会话中的用户id?
1 楼
huchuhan
2013-05-08
非常感谢 无比受用.
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18499编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2393部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3388两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 17701.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7654一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1251我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3258做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1152写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3973大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2364一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7496我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2748@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2075转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3077用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1745element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9786示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6571申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5298最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5284springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10398微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
### 基于Log4J的日志输出组件设计的关键知识点 #### 1. 引言:日志管理的重要性 在软件开发与系统运行过程中,日志管理占据着至关重要的地位。据统计,在一个软件系统中,日志输出相关的代码量约占总代码量的4%...
通过阅读文档,开发者可以更好地理解和利用log4j的全部功能,如自定义Appender、过滤器、异步日志记录等。 五、进阶应用 1. **日志性能优化**:合理设置日志级别,避免过多的日志输出影响系统性能。 2. **日志分级...
Log4j是一个开源的Java日志框架,它提供了丰富的日志记录功能,包括不同级别的日志输出(DEBUG、INFO、WARN、ERROR、FATAL),以及可定制的日志格式和输出目的地(控制台、文件、数据库等)。1.2.14是Log4j的一个...
配置Log4j-core-2.5通常涉及创建一个`log4j2.xml`或`log4j2.json`文件,指定日志级别、输出目的地(如控制台、文件、数据库等)、布局(如PatternLayout、XMLLayout等)以及过滤规则。例如,以下是一个简单的XML配置...
Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,用于设置日志器、输出器和布局等相关属性。以下是一些基本配置示例: ```properties # 配置控制台输出 log4j.rootLogger=DEBUG, Console log4j.appender....
相比`System.out.println`,Log4j具有许多优势,例如它允许在运行时动态地打开或关闭日志,可以选择特定包或类的日志输出,可以对日志进行分级,支持多种输出格式,甚至可以将日志信息输出到不同的位置。 要开始...
Log4j是Java平台上广泛使用的日志记录框架,它的全称是Apache Log4j,它为应用程序提供了灵活的日志记录功能。在Java开发中,日志记录是非常关键的一部分,可以帮助开发者跟踪程序运行状态,定位错误,进行性能分析...
2. 日志级别:Log4J提供了五种级别,按照严重性从高到低排列为FATAL、ERROR、WARN、INFO和DEBUG。开发者可以根据需要选择相应级别的日志输出,例如`logger.info("This is an informative message.")`。 三、日志...
除了默认的Appender和Layout,Log4j还允许自定义实现,以满足特定的需求。例如,你可以创建一个将日志发送到邮件服务器的Appender,或者定义一个输出JSON格式的日志的Layout。 **6. 实用技巧** - **异步日志**:...
这个版本包含了Log4j的核心组件,包括Appenders(输出目的地)、Layouts(日志格式化)、Loggers(日志记录器)和Filters(过滤器)。通过配置XML或.properties文件,可以灵活地定制日志策略,比如设置不同级别的...
- 灵活性:通过配置文件(如log4j.properties或log4j.xml),开发者可以自定义日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、输出目的地(控制台、文件、网络、数据库等)和格式。 - 性能优化:Log4j在运行时能够...
2. 配置文件:创建一个名为log4j.properties或log4j.xml的配置文件,定义日志级别、输出目的地、格式等。 3. 日志API:在代码中通过LoggerFactory获取Logger实例,然后调用debug、info、warn、error、fatal等方法...
Log4j支持七种日志级别,按严重程度从低到高排序:TRACE、DEBUG、INFO、WARN、ERROR、FATAL和OFF。根据不同的场景,可以通过配置调整日志级别,控制输出的日志信息量。 5. **性能优化** - 使用异步Appender可以...
Log4j主要由三个核心组件构成:Logger(日志器)、Appender(输出端)和Layout(布局)。Logger负责生成日志事件,Appender负责将这些事件输出到指定的地方,如控制台、文件、数据库等,而Layout则决定了日志事件的...
Log4j是Java编程语言中广泛使用的日志记录框架,其设计目的是为了提供灵活且强大的日志输出功能。这个框架允许开发者控制日志信息的输出级别、格式以及目的地,极大地提高了应用程序的日志管理效率。在Java开发环境...
相比传统的`System.out.println()`,Log4j提供了更高级别的日志管理,例如过滤信息、分级处理、输出格式定制等,极大地提升了开发效率和日志分析的便利性。 二、Log4j的核心组件 1. **Logger**:日志记录器,它是...
log4js起源于Java世界的log4j,是一款灵活且可配置的日志模块,专为Node.js设计。它支持多种输出格式,如控制台、文件、数据库等,且可以自定义级别和布局,方便开发者进行不同级别的日志记录。 2. **核心概念** ...
这个组件的起源可以追溯到2001年,由NeoWorks Limited启动,其设计灵感来源于Java平台上的著名日志框架log4j。Log4NET的核心特性在于它的灵活性和可扩展性,能够满足各种日志记录需求。 在软件开发中,日志记录扮演...
Log4cplus,一个源于Java的log4j项目的C++版本,是Linux环境中广泛使用的日志库之一。本文将深入探讨log4cplus-2.0.5这一特定版本,包括其主要功能、使用方法以及在Linux系统中的集成。 1. **Log4cplus简介** Log4...