首页 > 解决方案 > 引用 Jar 到日志文件的所有消息 + 设置日志文件编码为 UTF-8 以显示日文字符 (Log4j2)

问题描述

我有 2 个关于 Log4j2 的问题。

  1. 如何将引用的 Jar 文件的警告和错误设置为在日志文件而不是控制台中输出?目前,我的应用程序中的日志语句正在日志文件中打印。但是来自引用的 Jar 文件的那些消息正在控制台中打印。

  2. 如何在生成的日志文件中设置要打印的日文字符?目前,我已经设置了布局的字符集,但是日文字符的输出仍然是“?” 或垃圾字符。

这是我当前的属性文件:



    status = error
    name = PropertiesConfig
    
    property.filename = ${sys:user.home}\\myApp\\logs\\application.log
     
    filters = threshold
     
    filter.threshold.type = ThresholdFilter
    filter.threshold.level = debug
    #filter.threshold.level = info
     
    appenders = rolling
     
    appender.rolling.type = RollingFile
    appender.rolling.name = RollingFile
    appender.rolling.fileName = ${filename}
    appender.rolling.filePattern = ${sys:user.home}\\myApp\\logs\\log-backup-%d{MM-dd-yy-HH-mm-ss}-%i.log.zip
    appender.rolling.layout.type = PatternLayout
    appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    appender.rolling.layout.charset = "UTF-8"
    appender.rolling.policies.type = Policies
    appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    appender.rolling.policies.size.size=1MB
    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.max = 20
     
    loggers = rolling
     
    logger.rolling.name = org.mycom.myproj.tools.myapp
    logger.rolling.level = all
    logger.rolling.additivity = false
    logger.rolling.appenderRef.rolling.ref = RollingFile
    
    rootLogger.level = all
    rootLogger.appenderRefs = rolling
    rootLogger.appenderRef.rolling.ref = RollingFile


标签: javalog4j2

解决方案


我假设您通过“引用的 jar 文件”表示“外部第三方库”。库通常使用 apache.commons.logging 或 slfj4 之类的记录器抽象来发布其日志输出。

您需要添加一个额外的依赖项,将这些日志输出正确连接到您的 log4j2-Logger。例如“org.apache.logging.log4j:log4j-slf4j-impl:2.7”。

如果您不提供这样的桥梁,则日志抽象框架可能会进行默认初始化(可能会记录到控制台)。


推荐阅读