- 浏览: 300083 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- Tomcat (3)
- ZooKeeper (1)
- Maven (11)
- opensource (1)
- DataBase (5)
- UML (8)
- linux (87)
- Java (32)
- 算法 (3)
- Redis (1)
- HBase (2)
- 产品 (1)
- 模板引擎 (1)
- Eclipse (10)
- JUnit (5)
- Log4j (8)
- XML (2)
- JSON (1)
- SpringMVC (23)
- Spring (24)
- TCP/IP (4)
- Windows (10)
- Web Service (1)
- 源码版本管理 (1)
- Word (1)
- Test (1)
- Mybatis (7)
- CentOS (2)
- 多线程 (2)
- Web (7)
- Servlet (3)
- JavaWeb (4)
- MySQL (7)
- 汇编语言 (2)
- linux Shell (4)
- GIT (4)
- Python (1)
- 并发 (4)
- 编程通用 (1)
- JavaScript (1)
- 异常 (3)
- 自动化部署 (1)
- 大数据 (1)
- hive (2)
- 文本编辑器 (2)
- MINA (0)
- intellij IDEA (9)
- masm (0)
- blockchain (1)
- docker (2)
- IDEA (0)
- GO (3)
- nginx (1)
- springBoot (3)
- Websocket (2)
- macOS (1)
最新评论
-
woodding2008:
ss –pl 可以查看监听方式启动的端口以及pid
根据端口查PID,根据PID查进程名称 -
masuweng:
恩很试用,也很常用。
linux 常用命令
1什么是日志:
程序运行时,往特定输出文件或数据库里输出程序信息,如:出错信息,运行记录,调试记录,等等。
日志(LOG)一般分为以下几种类型。
FATAL:系统错误(大错误)(程序被错误中断)
系统出现大错误时输出(程序无法处理的大错误,如硬件错误)
ERROR:异常(程序被错误中断)
程序运行时出现的错误(程序员可以捕获处理)
WARN :警告(程序不会中断)
程序不算出错,但以不推荐方式运行时输出。
INFO : 信息(程序不会中断)
程序中有意输出的信息,如程序运行信息,如“程序开始”“程序结束”等。
DEBUG: 调试记录(程序不会中断)
调试程序时,跟踪程序运行的输出信息。
2 Log4J的使用。
Log4J是为了输出日志的Java程序包,是Apached的一个子项目。
可在http://logging.apache.org 下载并免费使用。
可以把LOG输出到,控制台,文件,或数据库。
这个网址里有很多Log4程序包,他们分别是,
log4c -- ANSI C 版
log4E -- Eiffel 版
log::Log4perl -- Perl 版
log4net -- .NET 版
log4r -- Ruby 版
log4j -- Java版
3 Log4J的能输出LOG的优先级。
OFF 级别高,关闭所有LOG
FATAL不可预想的无法继续运行程序的场合,一般是写进syslog(系统日志),在应用程序中很难捕获。
ERROR出现异常,应用程序停止运行等,需要紧急对应的程度的错误。
WARN 警告,以不建议的方式运行。
INFO 信息,实际运行中最基本程度的信息,如,启动服务器,运行某某程序或方法,运行结束等。
DEBUG调试时输出的信息,有可能产生非常大量的LOG文件。
如为解决问题而设置输出断点LOG等。DEBUG调试时输出的信息,所以投入运行时一般关闭DEBUG级别的LOG。
tracever log4j的 1.2.12 新加入比DEBUG还小的断点。
ALL 级别低 打开所有LOG
4 Struts使用Log4J。
项目里的,[JavaSource]下做一个,log4j.xml或log4j.properties以后Struts就可以使用Log4J了,log4j.xml,log4j.properties是Log4J的设置文档。struts先读入log4j.xml,要是没有再读入log4j.properties。我认为log4j.xml更容易理解,而且可以做到赛选各种级别LOG后输出(log4j.properies无法赛选),所以只讲log4j.xml。
5 Log4j.xml设置方法。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- org.apache.log4j.ConsoleAppender (输出到控制台),
org.apache.log4j.FileAppender (输出到文件),
org.apache.log4j.DailyRollingFileAppender(每天输出产生一个日志文件),
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件), 可通过 log4j.appender.R.MaxFileSize=100KB 设置文件 大小,还可通过 log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
-->
<!-- 输出通道"STDOUT",输出所有信息到控制台(也就是System.out.println()) -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<!--
org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
org.apache.log4j.PatternLayout (可以灵活地指定Log内容布局模式),
org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
-->
<!-- 输出自定义内容的LOG -->
<layout class="org.apache.log4j.PatternLayout">
<!--
%m 输出代码中指定的消息
%p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL
%r 输出自应用启动到输出该 log 信息耗费的毫秒数
%c 输出打了Log的类名,%c{1}从类名开始输出一个,
例如com.tongshida.Action,{1}时只输出Action, {2}输出 tongshida.Action
%C 输出.Error()方法所在的类。
%M 输出生成LOG的类当中的方法名称
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符, Windows 平台为 “rn”,Unix 平台为 “n”
%d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在
其后指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,输出类似:
2002 年 10 月 18 日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%[数值]p 输出的%p字符串长度小于[数值]时,补空格,默认右对齐,前加-号,左对齐,这里也可以是%m等别的
%.[数值]p输出的%p字符串长度大于[数值],后面切掉。
%[数值].[数值]p 就是综合上两行。
-->
<!-- 输出时Log内容的具体定义 -->
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
</appender>
<!-- 输出通道"DEBUG",输出方式是:只输出DEBUG级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
<!-- 输出Log文件的路径和文件名 -->
<param name="File" value="logs/debug/debug.log"/>
<!-- TOMCAT等WEB服务器重新启动时,是否插入到原有的LOG文件里,true 插入false 新建 -->
<param name="Append" value="true"/>
<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->
<!-- 因选择了RollingFileAppender了才有下面两个 MaxFileSize,MaxBackupIndex 选项 -->
<!-- MaxFileSize是一个LOG文件的最大的文件大小,当LOG文件超过这个值时,自动转成 *.log.1的LOG文件 -->
<param name="MaxFileSize" value="500KB"/>
<!-- MaxBackupIndex生成自动转成 *.log.1的LOG文件的个数,设置3时最多生成3个LOG备份文件,它们是[*.log.1][*.log.2][*.log.3] -->
<param name="MaxBackupIndex" value="2"/>
<!-- 输出时Log内容的具体定义 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<!-- 过滤输出时Log内容,在这里,LevelMin,LevelMax都定义了DEBUG,所以只输出DEBUG级别LOG的数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<!-- 指定输出LOG内容的最低等级 -->
<param name="LevelMin" value="DEBUG"/>
<!-- 指定输出LOG内容的最高等级 -->
<param name="LevelMax" value="DEBUG"/>
</filter>
</appender>
<!-- 输出通道"INFO",输出方式是:只输出INFO级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/info/info.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 输出通道"WARN",输出方式是:只输出WARN级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="WARN" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/warn/warn.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN"/>
<param name="LevelMax" value="WARN"/>
</filter>
</appender>
<!-- 输出通道"ERROR",输出方式是:只输出ERROR级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/error/error.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="ERROR"/>
</filter>
</appender>
<!-- 输出通道"FATAL",输出方式是:只输出INFO级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="FATAL" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/fatal/fatal.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="FATAL"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"ALL",输出方式是:输出所有级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="ALL" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/all/all.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"EVERYDAY",输出方式是:输出所有级别的LOG,并每天一个日志文件 -->
<appender name="EVERYDAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/ereryday/ereryday.log"/>
<param name="Append" value="true"/>
<!-- param name="Threshold" value="DEBUG"/ -->
<!-- 以日为单位输出LOG文件,每日输出一个LOG文件-->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<!-- 以时为单位输出LOG文件,每小时输出一个LOG文件
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message -->
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC)
Message <param name="ConversionPattern"
value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
<!-- 过滤输出时Log内容,在这里,LevelMin是DEBUG,LevelMax都FATAL,所以输出DEBUG级别到FATAL级别的LOG数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"DATABASE",输出方式是:输出所有级别的LOG到数据库 -->
<appender name="DATABASE" class="org.apache.log4j.jdbc.JDBCAppender">
<!--数据库的驱动,这里用的是MSSQL-->
<param name="driver" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<!--这是Oracle用的驱动,在这里用MSSQL所以屏蔽掉了
<param name="driver" value="oracle.jdbc.driver.OracleDriver" />
-->
<!--要连接的数据库-->
<param name="URL" value="jdbc:microsoft:sqlserver://192.168.0.120:1433;DatabaseName=test" />
<!--连接数据库的用户名-->
<param name="user" value="sa" />
<!--连接数据库的密码-->
<param name="password" value="sa" />
<!--向MSSQL数据库表LOG中插入数据的sql语句-->
<param name="sql" value=" INSERT INTO LOG(LOGDATE,LOGLEVEL,LOGCLASS,LOGLOGGER,LOGMESSAGE)
values('%d{yyyy-MM-dd HH:mm:ss}','%.50p', '%.50c','%.50l', '%.1000m')"/>
<!-- Oracle 的 insert 语句
<param name="sql" value=" insert into logrecord(id,packageid,userid,syscodeid,info,logtime,loglevel)
values(?,?,?,?,?,to_date('%d{yyyy-MM-dd HH:mm:ss}', 'yyyy-MM-dd HH24:mi:ss'),'%p')" />
-->
<!-- 过滤输出时Log内容,在这里,LevelMin是ERROR,LevelMax都FATAL,所以输出DEBUG级别到FATAL级别的LOG数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"HTML",输出方式是:输出所有级别的LOG到数据库 -->
<appender name="HTML" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/html/htmllog.html" />
<param name="Append" value="true" />
<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->
<param name="MaxFileSize" value="50KB"/>
<param name="MaxBackupIndex" value="2"/>
<!-- 好像现在只有固定输出格式 -->
<!-- 输出的HTML都缺少</table></body>等代码,log4j的Bug?我建议是不要使用 -->
<layout class="org.apache.log4j.HTMLLayout">
<param name="Title" value="TSD HP HTML LOG" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 设置域名限制,即com.tongshida域及以下的日志均输出到下面对应的通道中, 虽然下面<roo>的<priority value="ERROR">设置成ERROR,但com.tongshida下面的程序中的LOG要输出level="DEBUG"的 DEBUG级别以上的LOG-->
<!--给客户交货时要把它屏蔽-->
<logger name="com.tongshida">
<!-- 设置com.tongshida以下函数输出LOG的级别 -->
<level value="DEBUG"/>
<!-- 好像是指定输出通道,因为下面root里指定了所以这里屏蔽掉了
<appender-ref ref="DEBUG"/>
-->
</logger>
<root>
<!-- 设置输出范围,在这里光输出ERROR以上的,ERROR级别,FATAL级别的LOG -->
<priority value="ERROR"/>
<!-- 上边设置的输出通道,使用的在这里定义 -->
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="FATAL"/>
<appender-ref ref="ALL"/>
<appender-ref ref="EVERYDAY"/>
<appender-ref ref="DATABASE"/>
<appender-ref ref="HTML"/>
</root>
</log4j:configuration>
6 Log4j在Java程序里的使用。
Logger log = Logger.getLogger(inputClass);
//输出到数据库时有"'"会出错所以把它换成全角
String outmessage = message.replaceAll("'", "’");
log.debug(outmessage);log.error(outmessage);log.warn(outmessage);
如想要动态输出LOG(更改输出目录和文件名),也就是强制改变读到内存中的[Log4j.xml]里的相应输出目录和文件名。鉴于篇幅没能写下。
7.MSSQL_log_table_Creater.sql
CREATE TABLE [LOG] (
ID INTEGER NOT NULL PRIMARY KEY,
LOGDATE DATETIME,
LOGTIME TIMESTAMP,
LOGTHREAD VARCHAR(50),
LOGLEVEL VARCHAR(50),
LOGCLASS VARCHAR(50),
LOGLOGGER VARCHAR(200),
LOGMESSAGE VARCHAR(2000)
)
程序运行时,往特定输出文件或数据库里输出程序信息,如:出错信息,运行记录,调试记录,等等。
日志(LOG)一般分为以下几种类型。
FATAL:系统错误(大错误)(程序被错误中断)
系统出现大错误时输出(程序无法处理的大错误,如硬件错误)
ERROR:异常(程序被错误中断)
程序运行时出现的错误(程序员可以捕获处理)
WARN :警告(程序不会中断)
程序不算出错,但以不推荐方式运行时输出。
INFO : 信息(程序不会中断)
程序中有意输出的信息,如程序运行信息,如“程序开始”“程序结束”等。
DEBUG: 调试记录(程序不会中断)
调试程序时,跟踪程序运行的输出信息。
2 Log4J的使用。
Log4J是为了输出日志的Java程序包,是Apached的一个子项目。
可在http://logging.apache.org 下载并免费使用。
可以把LOG输出到,控制台,文件,或数据库。
这个网址里有很多Log4程序包,他们分别是,
log4c -- ANSI C 版
log4E -- Eiffel 版
log::Log4perl -- Perl 版
log4net -- .NET 版
log4r -- Ruby 版
log4j -- Java版
3 Log4J的能输出LOG的优先级。
OFF 级别高,关闭所有LOG
FATAL不可预想的无法继续运行程序的场合,一般是写进syslog(系统日志),在应用程序中很难捕获。
ERROR出现异常,应用程序停止运行等,需要紧急对应的程度的错误。
WARN 警告,以不建议的方式运行。
INFO 信息,实际运行中最基本程度的信息,如,启动服务器,运行某某程序或方法,运行结束等。
DEBUG调试时输出的信息,有可能产生非常大量的LOG文件。
如为解决问题而设置输出断点LOG等。DEBUG调试时输出的信息,所以投入运行时一般关闭DEBUG级别的LOG。
tracever log4j的 1.2.12 新加入比DEBUG还小的断点。
ALL 级别低 打开所有LOG
4 Struts使用Log4J。
项目里的,[JavaSource]下做一个,log4j.xml或log4j.properties以后Struts就可以使用Log4J了,log4j.xml,log4j.properties是Log4J的设置文档。struts先读入log4j.xml,要是没有再读入log4j.properties。我认为log4j.xml更容易理解,而且可以做到赛选各种级别LOG后输出(log4j.properies无法赛选),所以只讲log4j.xml。
5 Log4j.xml设置方法。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- org.apache.log4j.ConsoleAppender (输出到控制台),
org.apache.log4j.FileAppender (输出到文件),
org.apache.log4j.DailyRollingFileAppender(每天输出产生一个日志文件),
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件), 可通过 log4j.appender.R.MaxFileSize=100KB 设置文件 大小,还可通过 log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
-->
<!-- 输出通道"STDOUT",输出所有信息到控制台(也就是System.out.println()) -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<!--
org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
org.apache.log4j.PatternLayout (可以灵活地指定Log内容布局模式),
org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
-->
<!-- 输出自定义内容的LOG -->
<layout class="org.apache.log4j.PatternLayout">
<!--
%m 输出代码中指定的消息
%p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL
%r 输出自应用启动到输出该 log 信息耗费的毫秒数
%c 输出打了Log的类名,%c{1}从类名开始输出一个,
例如com.tongshida.Action,{1}时只输出Action, {2}输出 tongshida.Action
%C 输出.Error()方法所在的类。
%M 输出生成LOG的类当中的方法名称
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符, Windows 平台为 “rn”,Unix 平台为 “n”
%d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在
其后指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,输出类似:
2002 年 10 月 18 日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%[数值]p 输出的%p字符串长度小于[数值]时,补空格,默认右对齐,前加-号,左对齐,这里也可以是%m等别的
%.[数值]p输出的%p字符串长度大于[数值],后面切掉。
%[数值].[数值]p 就是综合上两行。
-->
<!-- 输出时Log内容的具体定义 -->
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
</appender>
<!-- 输出通道"DEBUG",输出方式是:只输出DEBUG级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
<!-- 输出Log文件的路径和文件名 -->
<param name="File" value="logs/debug/debug.log"/>
<!-- TOMCAT等WEB服务器重新启动时,是否插入到原有的LOG文件里,true 插入false 新建 -->
<param name="Append" value="true"/>
<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->
<!-- 因选择了RollingFileAppender了才有下面两个 MaxFileSize,MaxBackupIndex 选项 -->
<!-- MaxFileSize是一个LOG文件的最大的文件大小,当LOG文件超过这个值时,自动转成 *.log.1的LOG文件 -->
<param name="MaxFileSize" value="500KB"/>
<!-- MaxBackupIndex生成自动转成 *.log.1的LOG文件的个数,设置3时最多生成3个LOG备份文件,它们是[*.log.1][*.log.2][*.log.3] -->
<param name="MaxBackupIndex" value="2"/>
<!-- 输出时Log内容的具体定义 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<!-- 过滤输出时Log内容,在这里,LevelMin,LevelMax都定义了DEBUG,所以只输出DEBUG级别LOG的数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<!-- 指定输出LOG内容的最低等级 -->
<param name="LevelMin" value="DEBUG"/>
<!-- 指定输出LOG内容的最高等级 -->
<param name="LevelMax" value="DEBUG"/>
</filter>
</appender>
<!-- 输出通道"INFO",输出方式是:只输出INFO级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/info/info.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 输出通道"WARN",输出方式是:只输出WARN级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="WARN" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/warn/warn.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN"/>
<param name="LevelMax" value="WARN"/>
</filter>
</appender>
<!-- 输出通道"ERROR",输出方式是:只输出ERROR级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/error/error.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="ERROR"/>
</filter>
</appender>
<!-- 输出通道"FATAL",输出方式是:只输出INFO级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="FATAL" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/fatal/fatal.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="FATAL"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"ALL",输出方式是:输出所有级别的LOG,并文件大小到达指定大小时产生新的Log文件 -->
<appender name="ALL" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/all/all.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"EVERYDAY",输出方式是:输出所有级别的LOG,并每天一个日志文件 -->
<appender name="EVERYDAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/ereryday/ereryday.log"/>
<param name="Append" value="true"/>
<!-- param name="Threshold" value="DEBUG"/ -->
<!-- 以日为单位输出LOG文件,每日输出一个LOG文件-->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<!-- 以时为单位输出LOG文件,每小时输出一个LOG文件
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message -->
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%-20c{1}]★%-5p★%m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC)
Message <param name="ConversionPattern"
value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
<!-- 过滤输出时Log内容,在这里,LevelMin是DEBUG,LevelMax都FATAL,所以输出DEBUG级别到FATAL级别的LOG数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"DATABASE",输出方式是:输出所有级别的LOG到数据库 -->
<appender name="DATABASE" class="org.apache.log4j.jdbc.JDBCAppender">
<!--数据库的驱动,这里用的是MSSQL-->
<param name="driver" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<!--这是Oracle用的驱动,在这里用MSSQL所以屏蔽掉了
<param name="driver" value="oracle.jdbc.driver.OracleDriver" />
-->
<!--要连接的数据库-->
<param name="URL" value="jdbc:microsoft:sqlserver://192.168.0.120:1433;DatabaseName=test" />
<!--连接数据库的用户名-->
<param name="user" value="sa" />
<!--连接数据库的密码-->
<param name="password" value="sa" />
<!--向MSSQL数据库表LOG中插入数据的sql语句-->
<param name="sql" value=" INSERT INTO LOG(LOGDATE,LOGLEVEL,LOGCLASS,LOGLOGGER,LOGMESSAGE)
values('%d{yyyy-MM-dd HH:mm:ss}','%.50p', '%.50c','%.50l', '%.1000m')"/>
<!-- Oracle 的 insert 语句
<param name="sql" value=" insert into logrecord(id,packageid,userid,syscodeid,info,logtime,loglevel)
values(?,?,?,?,?,to_date('%d{yyyy-MM-dd HH:mm:ss}', 'yyyy-MM-dd HH24:mi:ss'),'%p')" />
-->
<!-- 过滤输出时Log内容,在这里,LevelMin是ERROR,LevelMax都FATAL,所以输出DEBUG级别到FATAL级别的LOG数据 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 输出通道"HTML",输出方式是:输出所有级别的LOG到数据库 -->
<appender name="HTML" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logs/html/htmllog.html" />
<param name="Append" value="true" />
<!-- 只输出定义的级别以上的LOG,因为在下面过滤LOG信息所以屏蔽 -->
<!-- param name="Threshold" value="info"/ -->
<param name="MaxFileSize" value="50KB"/>
<param name="MaxBackupIndex" value="2"/>
<!-- 好像现在只有固定输出格式 -->
<!-- 输出的HTML都缺少</table></body>等代码,log4j的Bug?我建议是不要使用 -->
<layout class="org.apache.log4j.HTMLLayout">
<param name="Title" value="TSD HP HTML LOG" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<!-- 设置域名限制,即com.tongshida域及以下的日志均输出到下面对应的通道中, 虽然下面<roo>的<priority value="ERROR">设置成ERROR,但com.tongshida下面的程序中的LOG要输出level="DEBUG"的 DEBUG级别以上的LOG-->
<!--给客户交货时要把它屏蔽-->
<logger name="com.tongshida">
<!-- 设置com.tongshida以下函数输出LOG的级别 -->
<level value="DEBUG"/>
<!-- 好像是指定输出通道,因为下面root里指定了所以这里屏蔽掉了
<appender-ref ref="DEBUG"/>
-->
</logger>
<root>
<!-- 设置输出范围,在这里光输出ERROR以上的,ERROR级别,FATAL级别的LOG -->
<priority value="ERROR"/>
<!-- 上边设置的输出通道,使用的在这里定义 -->
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="FATAL"/>
<appender-ref ref="ALL"/>
<appender-ref ref="EVERYDAY"/>
<appender-ref ref="DATABASE"/>
<appender-ref ref="HTML"/>
</root>
</log4j:configuration>
6 Log4j在Java程序里的使用。
Logger log = Logger.getLogger(inputClass);
//输出到数据库时有"'"会出错所以把它换成全角
String outmessage = message.replaceAll("'", "’");
log.debug(outmessage);log.error(outmessage);log.warn(outmessage);
如想要动态输出LOG(更改输出目录和文件名),也就是强制改变读到内存中的[Log4j.xml]里的相应输出目录和文件名。鉴于篇幅没能写下。
7.MSSQL_log_table_Creater.sql
CREATE TABLE [LOG] (
ID INTEGER NOT NULL PRIMARY KEY,
LOGDATE DATETIME,
LOGTIME TIMESTAMP,
LOGTHREAD VARCHAR(50),
LOGLEVEL VARCHAR(50),
LOGCLASS VARCHAR(50),
LOGLOGGER VARCHAR(200),
LOGMESSAGE VARCHAR(2000)
)
发表评论
-
log4j:WARN No appenders could be found for logger 解决方案
2018-06-07 16:55 1084log4j:WARN No appenders could b ... -
SLF4J: Failed to load class的问题及解决
2017-07-31 14:06 1264from http://blog.csdn.net/th ... -
Log4j配置详解之log4j.xml
2016-09-20 18:57 771一、log4j.jar包下载地址:http://loggin ... -
Log4j日志级别
2016-09-20 18:48 461日志记录器(Logger)是日志处理的核心组件。 ... -
Log4j配置模板
2016-09-20 18:44 469LOG4J的配置之简单使它遍及于越来越多的应用中了:Log ... -
Log4j配置详解2之log4j.properties
2016-09-20 17:57 900官网:http://logging.apache.org/l ... -
Log4j配置详解1之log4j.properties
2016-09-20 09:25 446Log4J的配置文件(Configuration File ...
相关推荐
log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn". 系统选择配置文件的优先级(从先到后)如下: (1).classpath下的名为log4j2-test.json...
Log4j 在 SSM 整合中的配置详解 Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM...
要在项目中使用Log4j,首先需要将`log4j.jar`添加到项目的类路径中,然后创建或引用`log4j.xml`配置文件。在代码中,通过以下方式创建和使用Logger: ```java import org.apache.log4j.Logger; public class ...
### Log4j配置详解 #### 一、Log4j简介 Log4j是Apache的一个开源项目,用于实现灵活的日志管理。它允许开发者通过简单的配置文件来控制日志的输出等级、输出目的地以及日志信息的格式化方式。Log4j支持多种配置...
2. **配置文件**:创建`log4j2.xml`或`log4j2.json`文件,定义日志级别和输出目的地。例如: ```xml <!-- log4j2.xml 示例 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n...
### Log4j配置详解 #### 一、Log4j配置文件概述 Log4j是一款流行的Java日志框架,被广泛应用于各种规模的应用程序中。它的配置文件(Configuration File)主要用于设置记录器(Logger)的级别、存放器(Appender)...
### Log4j.properties配置详解 #### 一、Log4j简介 Log4j是一个非常流行的Java日志框架,它能够帮助开发者轻松管理日志记录。Log4j的主要优点包括灵活性高、性能好以及易于配置。它由三个核心组件组成:记录器...
Log4j 配置文件说明 ...Log4j 配置文件是 Log4j 的核心组件之一,通过配置文件可以控制日志记录的级别、输出目的地和格式。了解 Log4j 配置文件的基本结构和配置方法,可以更好地使用 Log4j 实现日志记录和管理。
### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...
### log4j.properties配置详解与使用教程 #### 一、log4j简介 log4j是Apache的一个开源项目,用于实现日志功能。它提供了一种简单的方式来管理和配置应用程序的日志输出,支持多种输出目的地(如控制台、文件等)...
### Log4j 配置详解 #### 一、概述 Log4j 是一款非常流行的 Java 日志框架,它提供了一种灵活的日志记录机制。在实际应用中,开发者可以通过简单的配置来实现对日志级别的控制、日志信息的格式化以及日志文件的...
### log4j常用配置详解 ### #### 一、log4j.properties 配置解析 #### 在Java开发领域中,log4j是一款非常流行的日志框架,它提供了丰富的配置选项来满足不同场景下的日志记录需求。本文将详细介绍两种常见的log4j...
### Log4j配置与加载方法详解 Log4j是一款由Apache出品的日志记录工具,它提供了灵活的日志级别控制和多样化的日志输出方式,广泛应用于Java应用的开发中。本文将深入解析log4j的配置与加载机制,帮助开发者更好地...
《Log4j配置详解》 在Java开发中,日志记录是不可或缺的一部分,它帮助开发者追踪程序运行状态,定位问题,以及进行性能分析。Log4j作为一款强大的日志框架,因其灵活性和可配置性而备受青睐。本文将深入探讨Log4j...
### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...
Log4j 的配置主要通过 `log4j.properties` 或 `log4j.xml` 文件完成,这里我们以 `log4j.properties` 文件为例进行说明。 1. **配置Appender** - **Console Appender**:将日志输出到控制台。 ```properties log...
2. 配置灵活性:通过log4j.properties或log4j.xml配置文件,开发者可以定制日志输出的目标、格式、过滤器等。1.2.16版本优化了配置语法,使其更加易读和易用。 3. 多输出目的地:除了常见的控制台和文件,Log4j ...
### Log4j配置详解 #### 一、Log4j简介 Log4j 是一款非常流行的 Java 日志框架,由 Apache 软件基金会所提供。它能够帮助开发者在应用程序中记录日志信息,使得应用程序能够在运行时更加透明地展示其内部状态。Log...