成都網(wǎng)站維護(hù)公司百度營(yíng)銷推廣官網(wǎng)
日志可以方便追蹤和調(diào)試問題,以前用log4net寫日志,換Java了改用log4j寫日志,用法和log4net差不多。
到apache包下載下載log4j的包,解壓后把下圖兩個(gè)jar包引入工程
先到網(wǎng)站根下加一個(gè)log4j2.xml的配置文件來(lái)配置日志的格式和參數(shù)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR"><!--Configuration 配置項(xiàng)status:log4j本身的日志級(jí)別, “trace”, “debug”, “info”, “warn”, “error” and “fatal”monitorInterval:每隔多少秒從新讀取配置文件,可以在不重啟的情況下修改配置--><Appenders><!--Appenders定義日志輸出,有Console、File、RollingRandomAccessFile、MongoDB、Flume 等有Console:輸出源到控制臺(tái)File:將日志輸出到文件,通過fileName指定存儲(chǔ)到的文件(目錄不存在會(huì)自動(dòng)創(chuàng)建)RollingRandomAccessFile:也是寫入文件,但可以定義規(guī)則按照文件大小或時(shí)間等重新創(chuàng)建一個(gè)新的日志文件存儲(chǔ);如果是按時(shí)間分割需要配合filePattern使用--><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %F %logger{36} - %msg%n"/><!--PatternLayout指定輸出日志的格式 --></Console><File name="ExceptionRollingLogFileAppender" fileName="./Logs/異常日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="DebugRollingLogFileAppender" fileName="./Logs/調(diào)試日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="OperationRollingLogFileAppender" fileName="./Logs/方法日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="SqlRollingLogFileAppender" fileName="./Logs/Sql語(yǔ)句日志.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="CapabilityRollingLogFileAppender" fileName="./Logs/性能.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><File name="SecurityRollingLogFileAppender" fileName="./Logs/安全.txt" append="true"><PatternLayout pattern="%date [%thread] %-5level %15logger %appdomain %location -- %message %exception %newline"/></File><RollingFile name="customscript" fileName="${LOG_HOME}${FILE_NAME}" filePattern="${LOG_HOME}${FILE_NAME}.%d{yyyy-MM-dd}.log"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %M %L - %msg%xEx%n"/><Policies><TimeBasedTriggeringPolicy /></Policies></RollingFile></Appenders><Loggers><!--日志器,通過LogManager.getLogger(日志器name)的日志器名字決定使用具體哪個(gè)日志器分為根Root日志器和自定義日志器--><Root level="ERROR"><!--當(dāng)根據(jù)名字找不到對(duì)應(yīng)的日志器時(shí),使用Root的日志器leve:日志輸出等級(jí)(默認(rèn)ERROR);TRACE > DEBUG > INFO > WARN > ERROR, ALL or OFF--><AppenderRef ref="Console"/><!--AppenderRef:關(guān)聯(lián)Appenders中定義的輸出規(guī)則,可以有多個(gè),日志可以同時(shí)輸出到多個(gè)地方--><AppenderRef ref="debuglog"/></Root><Logger name="Exception" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="ExceptionRollingLogFileAppender"/></Logger><Logger name="Operation" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="OperationRollingLogFileAppender"/></Logger><Logger name="Debug" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="DebugRollingLogFileAppender"/></Logger><Logger name="SqlLog" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="SqlRollingLogFileAppender"/></Logger><Logger name="Capability" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="CapabilityRollingLogFileAppender"/></Logger><Logger name="Security" level="ALL" additivity="false"><!--Logger自定義日志器:name為日志器的名字,通過LogManager.getLogger(日志器name)獲得該日志器連接additivity:相加性。默認(rèn)為true,若為true會(huì)將當(dāng)前日志內(nèi)容也打印到它上面的日志器內(nèi),這里上面日志器是Root--><AppenderRef ref="SecurityRollingLogFileAppender"/></Logger></Loggers>
</Configuration>
然后實(shí)現(xiàn)日志工具類
package LIS.Core.Util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class LogUtils {//得到日志操作,默認(rèn)寫在Tomcat的Bin下//異常日志static final Logger loggerException = LogManager.getLogger("Exception");//操作日志static final Logger loggerOperation = LogManager.getLogger("Operation");//調(diào)試日志static final Logger loggerDebug = LogManager.getLogger("Debug");//sql日志static final Logger loggerSqlLog = LogManager.getLogger("SqlLog");//性能日志static final Logger loggerCapability = LogManager.getLogger("Capability");//安全日志static final Logger loggerSecurity = LogManager.getLogger("Security");/// <summary>/// 書寫調(diào)試日志/// </summary>/// <param name="message">日志內(nèi)容</param>public static void WriteDebugLog(String message){loggerDebug.debug(message);}/// <summary>/// 書寫異常日志/// </summary>/// /// <param name="message">日志內(nèi)容</param>/// <param name="exception">異常對(duì)象</param>public static void WriteExceptionLog(String message, Exception exception){loggerException.error(message, exception);}/// <summary>/// 書寫性能日志/// </summary>/// <param name="message">日志內(nèi)容</param>public static void WriteCapabilityLog(String message){loggerCapability.info(message);}/// <summary>/// 書寫安全日志/// </summary>/// <param name="message">日志內(nèi)容</param>public static void WriteSecurityLog(String message){loggerSecurity.info(message);}/// <summary>/// 書寫操作日志/// </summary>/// <param name="message">日志內(nèi)容</param>public static void WriteOperationLog(String message){loggerOperation.info(message);}/// <summary>/// 書寫調(diào)試日志/// </summary>/// <param name="message">日志內(nèi)容</param>public static void WriteSqlLog(String message){loggerSqlLog.debug(message);}
}
調(diào)用寫日志測(cè)試
在Tomcat的Bin下的Logs生成日志
后面就把System.out.println的打印日志換為L(zhǎng)IS.Core.Util.LogUtils寫日志了