由于华为云对象存储SDK的日志级别为INFO,在线上环境时打印大量日志,严重影响日志分析,所以准备将其日志级别修改为ERROR。
华为云官网给出以下两种方案(https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_2004.html)
1.将OBS SDK包中的log4j2.xml文件放到classpath根目录;
2.调用Log4j2Configurator.setLogConfig直接指定log4j2.xml文件的路径。
日志级别
- OFF: 关闭级别,如果设置为这个级别,日志打印功能将被关闭。
- TRACE:跟踪级别,如果设置为这个级别,将打印所有日志信息。通常不建议使用。
- DEBUG:调试级别,如果设置为这个级别,除了打印INFO级别以上的信息外,还将打印每次HTTP/HTTPS请求和响应的头信息,鉴权算法计算出的StringToSign信息等。
- INFO:信息级别,如果设置为这个级别,除了打印WARN级别以上的信息外,还将打印HTTP/HTTPS请求的耗时时间,ObsClient接口的耗时时间等。
- WARN:告警级别,如果设置为这个级别,除了打印ERROR级别以上的信息外,还将打印一些关键事件的信息,如重试请求超过最大次数等。
- ERROR:错误级别,如果设置为这个级别,仅打印发生异常时的错误信息。
设置方式
以下代码分别为南向日志、北向日志和OBS客户端运行日志设置了不同的日志级别
<!-- north log -->
<Logger name="com.obs.services.AbstractClient" level="INFO" additivity="false">
<AppenderRef ref="NorthInterfaceLogAppender" />
</Logger>
<!-- south log -->
<Logger name="com.obs.services.internal.RestStorageService" level="WARN" additivity="false">
<AppenderRef ref="SouthInterfaceLogAppender" />
</Logger>
<!-- access log -->
<Logger name="com.obs.log.AccessLogger" level="ERROR" additivity="false">
<AppenderRef ref="AccessLogAppender" />
</Logger>
但当我将配置文件放到classpath根目录之后,日志级别并未改变,且出现ERROR StatusLogger LogManager returned an instance of org.apache.logging.log4j.simple.SimpleLoggerContextFactory which does not implement org.apache.logging.log4j.core.impl.Log4jContextFactory. Unable to initialize Log4j
错误。
解决方案
在resource下新建log4j2.component.properties,其内容如下
log4j2.loggerContextFactory=org.apache.logging.log4j.core.impl.Log4jContextFactory
log4j.configurationFile=log4j2.xml
© 版权声明
文章版权归原作者所有,转载请注明出处。
THE END