- 浏览: 1336201 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
log4j.properties全配置
###############################log4j.properties############################### ##### Global Log Level(OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL) ############# log4j.rootLogger=DEBUG,STDOUT,DB ###### STDOUT Logger ############### log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender #输出目的Appender的日志级别,Appender的级别设置要优先于logger的 #级别设置,即先使用Appender的,而不管logger的日志级别是怎样设置的 log4j.appender.STDOUT.Threshold=DEBUG log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n ###### File Logger ############### #开发时,使用DEBUG,发布时最好修改成INFO,如果未设置级别,则使用 #父日志记录器的,设置了就使用logger的,不管父日志怎样设置 log4j.logger.com.mypakge=DEBUG,FILELOGER #开发时设为true,表示需要屏幕输出,发布时这里最好设置为false,表示不继承父日志记录器的Appender log4j.additivity.com.mypakge=true log4j.appender.FILELOGER=org.apache.log4j.RollingFileAppender #设置日志输出编码方式为UTF-8,如果不指定,会以当前运行操作系统的编码方式记录,这样在有的Linux上会出面乱码 log4j.appender.FILELOGER.encoding=UTF-8 #${LOGS_PATH}为JVM环境变量,我们可以在运行里给JVM加上该参数 -DLOGS_PATH=e:/tmp/log log4j.appender.FILELOGER.File=${LOGS_PATH}/system.log log4j.appender.FILELOGER.MaxFileSize=1024KB log4j.appender.FILELOGER.MaxBackupIndex=10 #文件采用追加方式 log4j.appender.FILELOGER.Append=true log4j.appender.FILELOGER.layout=org.apache.log4j.PatternLayout log4j.appender.FILELOGER.layout.ConversionPattern=[%d{yyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c] [%l] - [%m]%n ###### THREAD Logger ############### #线程日志一般记入到另一个文件,线程日志与主线程日志基本上没有什么逻辑关系 log4j.logger.threadlogger=DEBUG,THREADLOGER log4j.additivity.threadlogger=true log4j.appender.THREADLOGER=org.apache.log4j.RollingFileAppender log4j.appender.THREADLOGER.encoding=UTF-8 log4j.appender.THREADLOGER.File=${LOGS_PATH}/threadLog.log log4j.appender.THREADLOGER.MaxFileSize=2000KB log4j.appender.THREADLOGER.MaxBackupIndex=10 log4j.appender.THREADLOGER.layout=org.apache.log4j.PatternLayout log4j.appender.THREADLOGER.layout.ConversionPattern=[%d{yyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c] [%l] - [%m]%n ###### SOCKET Logger ############### log4j.addivity.org.apache=true log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender #注,SocketAppender没有encoding属性,而接收日志的服务器端类org.apache.log4j.net.Socke #tServer也不能设置编码方式,这里在考虑他们在通信时是不是传递的对象,而不是传递的字符串呢? #log4j.appender.SOCKET.encoding=UTF-8 log4j.appender.SOCKET.RemoteHost=localhost log4j.appender.SOCKET.Port=8089 log4j.appender.SOCKET.LocationInfo=true log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout #这里的格式配置不是很中要,好像不是要所这里的格式要输出那些消息,这里还是这个疑问就是在通信时是否是 #传递的是序列化后的对象?因为服务器接收到消息后能以任何格式输出,可见传递的信息是完整的。~@!@#!哈 #刚跟了一下org.apache.log4j.net.SocketAppender源码,在获取输出流的时候使用的是对象流,如下: #oos = new ObjectOutputStream(socket.getOutputStream());,这样就进一步证了我的想法,在 #通信时时传递的是对象,所以就不存在字符编码的问题与客户端日志格式输出问题。 log4j.appender.SOCKET.layout.ConversionPattern=%m ###### MAIL Logger ############### log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=ERROR log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=junJZ_2008@126.com log4j.appender.MAIL.SMTPHost=smtp.126.com #如果含有中文,则需使用native2asii log4j.properties log4jxx.properties 进行转换,否则乱码 log4j.appender.MAIL.Subject=Log4J\u63D0\u9192\u60A8\uFF1A\u7CFB\u7EDF\u53D1\u751F\u4E86\u4E25\u91CD\u9519\u8BEF log4j.appender.MAIL.To=junJZ_2008@163.com log4j.appender.MAIL.SMTPUsername=junJZ_2008@126.com log4j.appender.MAIL.SMTPPassword=XXX log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ###### DB Logger ############### log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DB.driver=com.mysql.jdbc.Driver log4j.appender.DB.URL=jdbc:mysql://127.0.0.1/test log4j.appender.DB.bufferSize=1 log4j.appender.DB.user=root log4j.appender.DB.password=111111 log4j.appender.DB.sql=insert into oplog (UserName,opttype,createTime,LogLevel,methodinfo,MSG) values ('%X{UserName}','%X{opttype}','%d{yyyy-MM-dd HH:mm:ss.SSS}','%p','%l','%m') log4j.appender.DB.layout=org.apache.log4j.PatternLayout |
配置日志服务器
日志服务器的服务器端由以下类启动:
log4j jar包中的org.apache.log4j.net.SocketServer
三个参数 【监听端口】【日志服务器配置文件】【客户端配置文件目录】
第三个参数【配置文件目录】其实指的是针对每个客户端的配置文件,名命规则为 "客户端IP.lcf"
基本原理
当日志保存请求发过来时,服务器会根据客户端的IP去在指定的目录(上面第三个参数)下搜索各自的配置文件,如果没有找到的话,再找是否配置了公用的客户端日志配置文件 generic.lcf,如果也没有配置的话,它将日志与服务器运行日志记录在同一文件中(这里为server.log),如果找到了,会把收到的日志按照配置文件要求记录,我在这 里使用的客户端配置文件与log4j.properties是一样的,所以这里会产生与客户机保存的日志是一样的。
在运行前还得要修改一下 org.apache.log4j.net.SocketServer 这个类,这个类在取客户端时有问题,网上其他人也这么认为(我使用的是1.215版本),找到 String key = s.substring(0, i); 这一行,修改成 String key = s.substring(i + 1); 即可,然后把修改好的class放入log4j-1.2.15.jar包中(后面附上修改好的包)。
socketserver.properties
#文件名socketserver.properties #如果需要显示日志界面,可以将本行启用 log4j.rootCategory=, A1 log4j.rootLogger=DEBUG,A3,STDOUT log4j.category.org.apache.log4j.net=INFO log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n log4j.appender.A1=org.apache.log4j.lf5.LF5Appender log4j.appender.A1.MaxNumberOfRecords=700 log4j.appender.A3=org.apache.log4j.RollingFileAppender log4j.appender.A3.file=${LOGS_PATH}/server.log log4j.appender.A3.MaxFileSize=1024KB log4j.appender.A3.MaxBackupIndex=10 log4j.appender.A3.layout=org.apache.log4j.PatternLayout log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n |
客户端配置文件 127.0.0.1.lcf
###############################log4j.properties############################### |
启动:
java -classpath log4j-1.2.15.jar -DLOGS_PATH=e:/tmp/sverlog o
rg.apache.log4j.net.SocketServer 8089 socketserver.properties .
现在使用一个测试类记录日志时,它会往日志服务器发送日志事件,服务器会根据服务器端配置的客户端配置文件记录日志。
配置邮件日志
由于刚开始使用1.2.9版本的包时 org.apache.log4j.net.SMTPAppender 发送邮件时不支持用户鉴权操作,而有的邮件服务器在发送时需要先登录后再发送,所以换用了1.2.15的包,SMTPAppender类支持SMTPUsername与SMTPPassword两个鉴权参数,这样就可以发送日志邮件了,具体配置参见文章开头。
配置数据库日志
创建表:
create table oplog(
UserName varchar(20),
opttype varchar(20),
createTime varchar(30),
LogLevel varchar(20),
methodinfo varchar(100),
MSG varchar(1024),
primary key (createTime)
)
表中的 UserName 与 opttype 表示用户名与操作类型,插入数据时使用 MDC 类进行预先设置,且配置文件中使用 %x{XXX} 来引用, MDC其实就是Java里的ThreadLocal类的派生类。
测试代码:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.MDC; public class TestLog { private static Log log = LogFactory.getLog(TestLog.class); public void log() { log.debug("Debug info."); log.info("Info info"); log.warn("Warn info"); log.error("Error info"); log.fatal("Fatal info"); } public static void main(String[] args) { MDC.put("UserName", "jzj"); MDC.put("opttype", "delete"); TestLog test = new TestLog(); test.log(); } }
- log4j-1.2.15.jar (382.5 KB)
- 下载次数: 223
发表评论
-
Java正则表达式
2014-03-14 10:16 1759Java正则表达式详解 作者:jzj 文 ... -
类的初始化与清理
2013-06-24 22:20 1453初始化时内存清零 当创建一个对象时,首先将在堆上为这个对象分 ... -
protected,这个错了吗?
2013-06-24 22:17 1245这几天对protected修饰符有点迷糊,随便找同事要了一本 ... -
Java中BigDecimal的8种舍入模式
2013-06-21 18:42 2179java.math.BigDecimal不可变的、任意精度的 ... -
Tomcat性能参数设置
2010-12-27 15:35 34789默认参数不适合生产环境使用,因此需要修改一些参数 1、 ... -
Java 6 JVM参数选项大全
2010-12-14 11:16 1635http://kenwublog.com/docs/java6 ... -
对象的安全构造
2013-06-21 18:43 1540在构造期间,不要公布“this”引用 一种可以将数据争用引 ... -
Java断言(assert)—— 转
2010-06-20 10:36 12095一、概述 在C和C++语言中都有assert关键,表示断言。 ... -
eclipse调试
2010-06-04 00:11 8074eclipse远程调试 在eclipse3.4前,远程调试时 ... -
protected,你真的理解了吗?
2010-05-09 17:56 2141Java中的访问控制修饰符有四个级别,但属protected最 ... -
利用反射进行深层克隆
2010-05-05 21:02 3668最近在看《effective java ... -
类与类之间的几种关系
2010-05-03 13:49 2416类和类、类和接口、接 ... -
运行java
2010-05-03 13:47 1050用javac命令编译一个打包的类时,如果没有加参数" ... -
Java内存模型与volatile
2010-04-25 13:21 18738内存模型描述的是程序 ... -
中断线程
2010-04-24 21:19 8973中断线程 线程的thread.i ... -
java中的关键字、保留字、标示符
2010-04-07 23:48 3371关键字 Java的关键字对java的编译器有特殊的意义, ... -
Java中的浮点数剖析
2010-04-07 23:27 4708定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固 ... -
线程间的同步与互斥
2010-03-23 21:29 2303线程间的同步(实指线程间的通信):一般来说,一个线程相对于另 ... -
UTF-16、UTF-16BE、UTF-16LE编码方式的区别
2010-03-23 21:20 9803import java.io.IOException; ... -
final、finally、finalize
2010-01-22 01:15 2416final关键字 先看看final关键字,它可以被用于以下几个 ...
相关推荐
### log4j.properties配置文件详解 #### 一、概述 `log4j.properties`是Apache Log4j框架中用于配置日志记录行为的核心文件之一。通过这个文件,开发者可以定义日志消息的输出方式(例如控制台或文件)、日志级别...
本文将详细探讨Log4j的使用,主要关注1.2.17版本的jar包以及配置文件`log4j.properties`。 ### 1. Log4j简介 Log4j是一个开源的日志组件,支持多种输出格式,如控制台、文件、数据库等。它的核心概念包括Logger、...
本教程将深入探讨如何配置和使用Log4j,包括`log4j.properties`配置文件的编写以及相应的Java代码示例。 1. **Log4j的核心组件** - **Logger**: 日志记录器,用于生成日志事件。 - **Appender**: 输出目标,负责...
本文将详细介绍Log4j的使用方法以及配置文件`log4j.properties`的设置。 1. **Logger** Logger是日志信息的源头,它是Log4j中最基本的类。通过创建Logger实例,你可以为不同的类或模块分配不同的日志级别,如DEBUG...
接下来,在`log4j.properties`中进行相应的配置: ```properties log4j.logger.info=info log4j.appender.info=com.company.LogAppender log4j.appender.info.layout=org.apache.log4j.PatternLayout log4j....
本文将深入探讨log4j.properties配置文件的使用,以及如何在实际项目中充分利用其功能。参考博文链接:[https://fengshayage.iteye.com/blog/837664](https://fengshayage.iteye.com/blog/837664)。 **一、log4j...
下面将详细解析`log4j.properties`的配置项及其作用,同时提供实例来加深理解。 ### 1. Logger 日志记录的核心是`Logger`,它是Log4j中的主要组件之一。`Logger`负责收集和输出日志消息。`log4j.rootLogger`是所有...
**log4j.properties** 文件是Log4j的核心配置文件之一,它定义了日志记录器(Logger)和日志输出目标(Appender)等设置。以下是对该文件中的关键配置项的解析: ### 1. 根Logger配置 ```properties log4j.root...
- 在Log4j的配置文件(通常是`log4j.properties`或`log4j.xml`)中,你可以定义多个Appender,每个Appender对应一个特定的功能或模块。 - 使用`category`或`logger`标签指定Logger的名称,这通常与你的功能模块相...
总结来说,这个压缩包提供了一个简洁的日志解决方案,通过`log4j.properties`配置日志行为,`LogUtil.java`提供方便的静态方法供代码中使用,而`LogInit.java`则负责在程序启动时初始化Log4j。这样的封装方式使得在...
2. **Log4j配置文件(log4j.properties或log4j.xml)** - 在Java项目中,通常会有一个log4j配置文件,用于定义日志记录的级别、输出方式和格式。 - 示例配置: ``` log4j.rootLogger=DEBUG, FILE log4j....
在Log4j项目中,通常会有一个`log4j.properties`或`log4j.xml`配置文件,用于定义日志行为。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, stdout, FILE log4j.appender.stdout=org....
Log4j.properties 配置详解 Log4j.properties 配置是 Java 项目中最常用的日志记录配置文件之一。它可以帮助开发者记录项目中的日志信息,以便于项目的调试和维护。 一、依赖项配置 在使用 Log4j.properties 配置...
Log4j的核心配置文件是`log4j.properties`或`log4j.xml`。在1.2.7版本中,你可以通过配置文件指定日志的输出级别、输出目标和格式。例如: ```properties # log4j.properties 示例 log4j.rootLogger=INFO, stdout, ...
配置日志文件时,你需要在项目中包含这两个JAR文件,并创建一个log4j的配置文件(通常是log4j.properties或log4j.xml)。配置文件中,你可以指定日志级别、输出目的地、日志格式等。例如,以下是一个简单的`log4j....
Log4j 的配置主要通过一个XML或者 properties 文件进行,如 `log4j.properties` 或 `log4j.xml`。配置文件定义了日志输出的行为,如日志输出的格式、目的地(控制台、文件、数据库等)以及过滤规则。例如: ```...
2. **配置log4j.properties或log4j.xml**:定义日志级别、Appender和Layout。例如: ```properties log4j.rootLogger=DEBUG, FILE log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File...
Log4j的配置通常通过一个名为log4j.properties或log4j.xml的配置文件完成。以下是一个简单的配置示例: ```properties # log4j.properties log4j.rootLogger=DEBUG, stdout, file log4j.appender.stdout=org.apache...
2. **配置Log4j**:创建一个`log4j.properties`或`log4j.xml`配置文件,设置日志级别、Appender和Layout。 3. **初始化Log4j**:在程序启动时,通过`PropertyConfigurator.configure("path/to/log4j.properties")`...