如何使用log4j将希伯来语字符串写入日志文件

时间:2019-05-31 20:55:44

标签: java log4j

如何将希伯来语字符串写入log4j文件。现在,我在文件中看到??????

我在网上到处搜索以将Unicode转换为字符串:

String abc = myStr.replaceAll("\u200F", "");
   abc = abc.replaceAll("\u200E", "");
   byte[] utf8Bytes = abc.getBytes(Charset.forName("UTF-8"));
   String value = new String(utf8Bytes);
   log.debug("value : "+ value );

我只需要以可读格式将希伯来语字符串写到Log4j文件中。这是我的配置:

log4j.rootLogger=debug, stdout, R log4j.logger.testlogging=DEBUG 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender     
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout     
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd} %5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender     
log4j.appender.R.File=C:\\dri\\ums.log log4j.appender.R.MaxBackupIndex=5     
log4j.appender.R.layout=org.apache.log4j.PatternLayout     
log4j.appender.R.layout.ConversionPattern= %d{dd MMM yyyy HH:mm:ss,SSS} %5p [%t] (%F:%L) - %m%n log4j.appender.FILE.encoding=UTF-8 

1 个答案:

答案 0 :(得分:0)

根据我从评论中收集的信息和我个人的经验,这很可能不是Log4j本身的问题。我发表了一条评论,指出:

  

Log4j文件到底是什么意思? FileAppender指向的是常规文本日志文件吗?因为我现在尝试打印希伯来语文本,所以一切正常。我认为这不是Log4j问题,可能与您的文本阅读器有关。

其他评论也证实了他们的怀疑,即可能是您的文本阅读器导致了此问题。通过在Notepad++中执行以下操作,我可以重现您的问题:

  • 在记事本++中打开一个新标签。
  • 复制并粘贴包含希伯来字母的sample文本。
  • Language -> Convert to ANSI

转换前的文字:

See also: אלף־בית‎ and אַלף־בית‎

转换后的文本:

See also: ???????? and ?????????

根据您提供的代码(假设幕后没有我们不知道的恶作剧),我们可以肯定地得出结论,您正在写入的文件编码已设置为ANSI,您的所有特殊字符都将转换为问号,因为它们无法解码,或者您的字符被读取为UTF-8,而仅显示为ANSI

  

ANSI和UTF-8都是编码格式。 ANSI是用于编码拉丁字母的常见一字节格式。而UTF-8是可变长度的Unicode格式(从1到4个字节),可以编码所有可能的字符。

我建议执行以下步骤:

  • 导航至Settings -> Preferences -> New Document -> Encoding,并确保选择了UTF-8 (Apply to opened ANSI files)选项。

  • 关闭当前在Notepad++中打开的所有文件,并删除日志文件。确保您实际上关闭文件,而不是仅关闭Notepad++。这应该从缓存中清除文件条目,并允许您使用其他编码再次打开它们。

  • 运行Java应用程序,并让Log4j打印到文件。

  • 使用Notepad++打开文件,然后通过单击UTF-8标签来检查您是否在Encoding中进行编码。如果该选项未设置为UTF-8,请进行更改。

  • 如果以上方法均无效,请在评论中发布更多信息。

不幸的是,我对编码问题不是很精通,并且在编写本文时必须查找一些东西,所以我无法为您提供所需的帮助。但是,除了提供上述步骤之外,我还可以引导您转到以下链接,该链接应该为您提供更多的知识,并且(因此)对您的问题有更多的了解: