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###############################
##### Global Log Level(OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL) #############
log4j.rootLogger=DEBUG,FILELOGER ###### 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}/client.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
启动:
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.properties全配置 (转)的更多相关文章
- log4j.properties配置详解
1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ...
- log4j.properties配置
一.日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 01.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 02.对 ...
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- log4j.properties 使用
一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...
- java 执行jar指定log4j.properties文件位置
默认情况下,log4j.properties会被加载,并且这个文件需要在classpath根目录,当打包jar时,会打包打jar内部,当需要修改日志级别时,会比较麻烦 可以使用:java -jar - ...
- log4j.properties 详解与配置步骤
一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失IN ...
- 转载:log4j.properties log4j.xml 路径问题
自动加载配置文件: (1)如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解.log4j启动时,默认会寻找source folder下的log4j.xml配置文件,若没有,会寻找lo ...
- log4j.properties 详解与配置步骤(转)
找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...
- spring log4j.properties 没有日志的问题
一. log4j.properties 1. log4j.properties放在spring工程的src/main/rescours目录下无法读取. 测试后发现需要把log4j.properti ...
随机推荐
- Xcode4.6 开发 metaio 增强现实 项目(二)--增强现实的实现
经过昨天的一些步骤,我们已经将我们的IOS应用的基本界面搭建好,下面我们将开始新的征程:增强现实技术的实现: 进入webView后,我们要选用我们这次需要用的nib文件,它是一个家居摆放应用的界面文件 ...
- 【C++自我精讲】基础系列一 指针与引用
[C++自我精讲]基础系列一 指针与引用 一 前言 指针.引用.指针与引用区别. 二 指针 变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间. //变量 ...
- 函数sql黑马程序员——SQL常用函数
最近使用开辟的过程中出现了一个小问题,顺便记录一下原因和方法--函数sql ---------------------- ASP.Net+Android+IO开辟S..Net培训.等待与您交流! -- ...
- Mutex 实现进程独占资源
背景:开发一套依赖硬件运行的软件,为避免硬件资源调用冲突,一个时间内只允许运行一个软件进程. 方法:使用Mutex判断该软件是否已启动,如果是,关闭即将启动的软件. 代码: static class ...
- linux服务器开发二(系统编程)--进程相关
进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...
- 浅谈href=#与href=javascript:void(0)的区别
#"包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到了页首 而 ...
- InnoDB的约束机制
数据完整性 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制.几乎所有的关系型数据库都提供了约束(constra ...
- 【CentOS如何最小化安装】
近来发现越来越多的运维小伙伴们都有最小化安装系统的洁癖,因此,找老男孩来咨询,这个"洁癖"好习惯啊,必须支持,,因此发布本文和大家分享下. (1)系统安装类型选择及自定义额外包组 ...
- .PHP后缀大写导致Linux下Composer找不到类
在本地Windows写完一个Composer包,上传到Linux报错找不到类,纠结了一下午,最后发现是.PHP后缀大写导致的问题. mv Google2FA.PHP Google2FA.php
- xtrabackup在线备份主库,搭建slave,使用gtid模式
mysql:5.6.29xtrabackup:2.2.10master:192.168.166.129slave:192.168.166.131mysql数据目录:/data/mysqlmysql备份 ...