java - 引用 Jar 到日志文件的所有消息 + 设置日志文件编码为 UTF-8 以显示日文字符 (Log4j2)
问题描述
我有 2 个关于 Log4j2 的问题。
如何将引用的 Jar 文件的警告和错误设置为在日志文件而不是控制台中输出?目前,我的应用程序中的日志语句正在日志文件中打印。但是来自引用的 Jar 文件的那些消息正在控制台中打印。
如何在生成的日志文件中设置要打印的日文字符?目前,我已经设置了布局的字符集,但是日文字符的输出仍然是“?” 或垃圾字符。
这是我当前的属性文件:
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
解决方案
我假设您通过“引用的 jar 文件”表示“外部第三方库”。库通常使用 apache.commons.logging 或 slfj4 之类的记录器抽象来发布其日志输出。
您需要添加一个额外的依赖项,将这些日志输出正确连接到您的 log4j2-Logger。例如“org.apache.logging.log4j:log4j-slf4j-impl:2.7”。
如果您不提供这样的桥梁,则日志抽象框架可能会进行默认初始化(可能会记录到控制台)。
推荐阅读
- python - 使用 mapnik 渲染道路
- python - 在 TensorFlow 中打印完整的张量值
- sql-server - Invoke-Sqlcmd 运行 SQL 脚本捕获详细输出
- python - 离线绘图和下拉小部件
- typescript - 解析发出 TypeScript?- `const a = {foo: 'bar'}` 到 `const a = {foo: 'bar', can: 'haz'}`?
- ansible - 在自定义模块中访问预定义的 ansible 模块
- python-3.x - 导入和解析 .data 文件
- javascript - 如何在我的数据库中存储元素的排序顺序并在重新排序时更新它们
- excel - Powershell 等待宏在 Excel 中执行
- ios - Alamofire 上传图片损坏