最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Log4j日志分類和過濾敏感字段的實例

 更新時間:2020年12月03日 15:18:35   作者:weixin_39722651  
這篇文章主要介紹了Log4j日志分類和過濾敏感字段的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

項目上線時,需要對項目做安全檢查,其中有兩項是對輸出日志進(jìn)行分類和過濾掉日志中敏感字段。

項目使用Log4j日志系統(tǒng),下面簡單介紹下這兩項要求的實現(xiàn)方式。

對日志進(jìn)行分類,要求調(diào)用其他服務(wù)的API日志按照格式單獨輸出到一個文件。

方式: 除根Logger外,再額外增加一個apiLogger,如下,

 <!-- api logger的設(shè)置-->
 <logger name="log4j.logger.apiLogger" additivity="false">
 <level value ="INFO"/>
 <appender-ref ref="apiConsoleAppender"/>
 <appender-ref ref="apiMsgOutGoingAppender"/>
 </logger>
 
 <!-- 根logger的設(shè)置-->
 <root>
 <level value ="INFO"/>
 <appender-ref ref="ConsoleAppender"/>
 <appender-ref ref="DailyRollingFileAppender"/>
 </root>

注: (1) additivity設(shè)為false,則root中的配置就失效了。即使用root配置的日志不會在apiLogger的文件中出現(xiàn);

(2) 每種logger指定兩個appender,分別是在debug console和Linux 服務(wù)器日志文件中顯示。

根日志的ConsoleAppender和DailyRollingFileAppender的配置如下:

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
 <!-- 設(shè)置日志輸出的樣式 -->
 <layout class="org.apache.log4j.PatternLayout">
 <!-- 設(shè)置日志輸出的格式 -->
 <param name="ConversionPattern" value="**** [%p] [%d{yyyy/MM/dd HH:mm:ss:SSS}] ******************************%n[Thread] %t%n[Class] %C%n[Method] %M%n[Message] %m%n%n" />
 </layout>
</appender>
<appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
 <!-- 設(shè)置日志信息輸出文件全路徑名 -->
 <param name="File" value="/var/log/tomcat/hpc.log" />
 <!-- 設(shè)置日志多久回滾一次,即產(chǎn)生一個新的日志文件 -->
 <param name="DatePattern" value="'_'yyyy-MM-dd" />
 <!--日志編碼格式-->
 <param name="Encoding" value="UTF-8" />
 <!-- 設(shè)置是否在重新啟動服務(wù)時,在原有日志的基礎(chǔ)添加新日志 -->
 <param name="Append" value="true" />
 <!-- 設(shè)置日志輸出的樣式 -->
 <layout class="org.apache.log4j.PatternLayout">
 <!-- 設(shè)置日志輸出的格式 -->
 <param name="ConversionPattern" value="**** [%p] [%d{yyyy/MM/dd HH:mm:ss:SSS}] *************************%n[Thread] %t%n[Class] %C%n[Method] %M%n[Message] %m%n%n" />
 </layout>
 <!-- 日志過濾: adminPass, X-Auth-Token; 包含該字符串的信息不輸出 -->
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="adminPass" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="X-Auth-Token" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="PW" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="pwd" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
 <!-- password Password-->
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="assword" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
 <!-- 過濾pstmt-, 所有的數(shù)據(jù)庫操作均包含此字符串-->
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="pstmt-" />
 <param name="AcceptOnMatch" value="false" />
 </filter>
</appender>

apiLogger的apiConsoleAppender和apiMsgOutGoingAppender設(shè)置如下:

<!-- 將日志信息輸出到文件,可以配置多久產(chǎn)生一個新的日志信息文件 -->
<appender name="apiConsoleAppender" class="org.apache.log4j.ConsoleAppender">
 <!-- 設(shè)置日志輸出的樣式 -->
 <layout class="org.apache.log4j.PatternLayout">
 <!-- 設(shè)置日志輸出的格式 -->
 <param name="ConversionPattern" value='[%-5p] [Outgoing] %X{og.serverIp} [%d{yyyy-MM-dd HH:mm:ss,SSS z}] %X{og.respTime} "%X{og.visitUri}" %X{og.statusCode} %X{og.reqLen} %X{og.respLen} %n' />
 </layout>
</appender>
<appender name="apiMsgOutGoingAppender" class="org.apache.log4j.RollingFileAppender">
 <!-- 設(shè)置日志信息輸出文件全路徑名 -->
 <param name="File" value="/var/log/tomcat/interface.log" />
 <!--日志編碼格式-->
 <param name="Encoding" value="UTF-8" />
 <!-- 設(shè)置是否在重新啟動服務(wù)時,在原有日志的基礎(chǔ)添加新日志 -->
 <param name="Append" value="true" />
 <!-- 設(shè)置文件最大size -->
 <param name="MaxFileSize" value="30MB" />
 <!-- 保留日志文件數(shù)的最大值 -->
 <param name="MaxBackupIndex" value="100" />
 <!-- 設(shè)置日志輸出的樣式 -->
 <layout class="org.apache.log4j.PatternLayout">
 <!-- 設(shè)置日志輸出的格式 -->
 <param name="ConversionPattern" value='[%-5p] [Outgoing] %X{og.serverIp} [%d{yyyy-MM-dd HH:mm:ss,SSS z}] %X{og.respTime} "%X{og.visitUri}" %X{og.statusCode} %X{og.reqLen} %X{og.respLen} %n'/>
 </layout>
</appender>

注:(1) Log4j系統(tǒng)Appender組件負(fù)責(zé)日志的輸出配置,包括輸出目錄,最大輸出大小,輸出文件數(shù)等;Layout組件負(fù)責(zé)日志輸出的格式。

(2)JAVA代碼在使用日志系統(tǒng)時,默認(rèn)用根日志的配置輸出,若想使用apiLogger,使用:

private static Logger log = Logger.getLogger("log4j.logger.apiLogger");

(3)日志layout中傳入自定義參數(shù),使用MDC類:

public static void configAndPrintAPILogger(Logger logger, int statusCode, String method, String url,
 long responseTime,
 int requestLength, int responseLength)
 {
 String endpoint = url.split("/")[2];
 MDC.put("og.serverIp", endpoint);
 MDC.put("og.respTime", responseTime);
 //截取 https://endpoint之后的
 MDC.put("og.visitUri", method + " " + url.substring(8 + endpoint.length()));
 MDC.put("og.statusCode", statusCode);
 MDC.put("og.reqLen", requestLength);
 MDC.put("og.respLen", responseLength);
 logger.info("");
 }

經(jīng)上述配置后,日志的輸出如下:

2. 日志中過濾敏感字符,如password, PW, adminPass等。如DailyRollingFileAppender中所示,使用StringMatchFilter:

 <!-- 過濾password Password-->
 <filter class="org.apache.log4j.varia.StringMatchFilter">
 <param name="StringToMatch" value="assword" />
 <param name="AcceptOnMatch" value="false" />
 </filter>

StringMatchFilter中使用msg.indexOf(StringToMatch)參數(shù)判斷是否過濾,即該條日志包含指定字段,若AcceptOnMatch設(shè)置為false,則不輸出。

需要注意的是,log4j日志系統(tǒng)采用xml格式時才能用該種方式過濾,properties格式時不能用此方法。

補(bǔ)充知識:解決日志log4j,slf4j,logback沖突問題

問題描述:

啟動tomcat,發(fā)現(xiàn)tomcat無法啟動,catalina.out有如下錯誤日志:

INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStop Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory
 at org.apache.log4j.LogManager.getLogger(LogManager.java:44)
 at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
 at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
 at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
 at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
 at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:274)
 at org.springframework.web.context.ContextCleanupListener.<clinit>(ContextCleanupListener.java:43)
 at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:145)
 at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4860)
 at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5495)
 at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:224)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:159)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)

問題分析:

檢查lib庫下面,發(fā)現(xiàn)今天更新過log4j和logback組合,總共有如下包:

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.1.jar

log4j-1.2.16.jar

log4j-over-slf4j-1.7.5.jar

logback-core-1.1.2.jar

logback-classic-1.1.2.jar

通過查詢資料發(fā)現(xiàn),包slf4j-log4j12-1.6.1.jar 和log4j有沖突。

解決方法:

刪除后正常,刪除這個:slf4j-log4j12-1.6.1.jar

附件常見組合:

log4j+slf4j

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.1.jar

log4j-1.2.16.jar

slf4j+logback

logback-core-1.1.2.jar

logback-classic-1.1.2.jar

slf4j-api-1.7.5.jar

以上這篇Log4j日志分類和過濾敏感字段的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 通過HashMap原理詳解entrySet中的疑問

    通過HashMap原理詳解entrySet中的疑問

    這篇文章主要為大家介紹了通過HashMap原理詳解entrySet中的疑問,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Springboot自帶線程池的實現(xiàn)

    Springboot自帶線程池的實現(xiàn)

    本文主要介紹了Springboot自帶線程池的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • JPA?通過Specification如何實現(xiàn)復(fù)雜查詢

    JPA?通過Specification如何實現(xiàn)復(fù)雜查詢

    這篇文章主要介紹了JPA?通過Specification如何實現(xiàn)復(fù)雜查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java 使用JDOM解析xml文件

    java 使用JDOM解析xml文件

    java中如何使用JDOM解析xml文件呢?以下小編就用實例為大家詳細(xì)的介紹一下。需要的朋友可以參考下
    2013-07-07
  • SpringCloud Gateway動態(tài)路由配置詳解

    SpringCloud Gateway動態(tài)路由配置詳解

    這篇文章主要為大家介紹了SpringCloud Gateway動態(tài)路由配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • java檢查服務(wù)器的連通兩種方法代碼分享

    java檢查服務(wù)器的連通兩種方法代碼分享

    這篇文章主要介紹了java檢查服務(wù)器的連通兩種方法代碼分享,涉及ping的介紹以及檢查服務(wù)器連通的兩種方法代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 解決spring boot啟動掃描不到自定義注解的問題

    解決spring boot啟動掃描不到自定義注解的問題

    這篇文章主要介紹了解決spring boot啟動掃描不到自定義注解的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java單例模式的深入了解

    Java單例模式的深入了解

    這篇文章主要為大家介紹了Java單例模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Mybatis配置文件之動態(tài)SQL配置備忘錄

    Mybatis配置文件之動態(tài)SQL配置備忘錄

    這篇文章主要介紹了Mybatis配置文件之動態(tài)SQL配置備忘錄的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • kafka添加安全驗證配置方式

    kafka添加安全驗證配置方式

    這篇文章主要介紹了kafka添加安全驗證配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

昌都县| 潜山县| 专栏| 阿城市| 庆元县| 上蔡县| 崇阳县| 遂溪县| 内黄县| 海城市| 怀安县| 精河县| 吐鲁番市| 黎川县| 南阳市| 黄冈市| 凤台县| 治多县| 资中县| 长汀县| 遵化市| 邵东县| 永清县| 大埔县| 涿州市| 监利县| 尖扎县| 卫辉市| 京山县| 英吉沙县| 自治县| 鄂托克前旗| 肇东市| 阿克陶县| 方城县| 萨迦县| 黄山市| 伊川县| 武定县| 红桥区| 全椒县|