如何“审查”库自生成日志中的某些数据?

时间:2019-07-13 08:21:30

标签: scala logging logback

我正在为我的应用程序使用scalikejdbc库。当我阅读日志时,scalikejdbc会自行生成,它给了我类似的东西:

06:02:16.891 [main] DEBUG scalikejdbc.ConnectionPool$ - Registered connection pool : ConnectionPool(url:jdbc:sqlserver://foo.bar:8080;databaseName=foobar;user=user;password=**PASSWORD**;...

因此scalike本身会将我数据库用户的密码扔到日志中,这是不合适的。

我一直在考虑使用https://logback.qos.ch/manual/filters.html之类的东西完全过滤那些日志,但是我确实需要这些来自scalike的日志中的奇怪信息,因此我无法完全过滤它们。

我现在拥有什么:

06:02:16.891 [main] DEBUG scalikejdbc.ConnectionPool$ - Registered connection pool : ConnectionPool(url:jdbc:sqlserver://foo.bar:8080;databaseName=foobar;user=user;password=somepassword;

我想得到什么:

06:02:16.891 [main] DEBUG scalikejdbc.ConnectionPool$ - Registered connection pool : ConnectionPool(url:jdbc:sqlserver://foo.bar:8080;databaseName=foobar;user=user;password=CENSORED;

1 个答案:

答案 0 :(得分:0)

例如,考虑在logback.xml配置中使用replace转换词,

%replace(%msg){"password=.*", "password=CENSORED"}

给出了

logger.debug("password=123456")

应该输出类似

[debug] application - password=CENSORED

Docs状态

  

replace(p){r,t} 用它的正则表达式替换出现的“ r”   字符串中的替换“ t”由子模式“ p”产生。对于   例如,“%replace(%msg){'\ s',``}”将删除所有包含的空格   在事件消息中。

以下是我的logback.xml的示例:

<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel %logger{15} - %replace(%msg){"password=.*", "password=CENSORED"}%n %xException{10}</pattern>
    </encoder>
  </appender>

  <logger name="play" level="INFO" />
  <logger name="application" level="DEBUG" />

  <logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />

  <root level="WARN">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>