String clean = args[1].replace('\n', '_').replace('\r', '_');
log.info(clean);
我的问题是,在log4j中是否有任何中心位置,在那里一个单独的更改就可以解决这个问题?
负责序列化日志消息的是布局
,换行转换代码就属于这里。
我建议创建自己的(平凡的)PatternLayout
子类来完成转换。这里的Log4j邮件列表中也讨论了这一点。下面是该线程中建议的解决方案的一个稍微修改版本:
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
public class NewLinePatternLayout extends PatternLayout {
public NewLinePatternLayout() { }
public NewLinePatternLayout(String pattern) {
super(pattern);
}
public boolean ignoresThrowable() {
return false;
}
public String format(LoggingEvent event) {
String original = super.format(event);
// Here your code comes into play
String clean = original.replace('\n', '_').replace('\r', '_');
StringBuilder sb = new StringBuilder(clean);
String[] s = event.getThrowableStrRep();
if (s != null) {
for (int i = 0; i < s.length; i++) {
sb.append(s[i]);
sb.append('_');
}
}
return sb.toString();
}
}
相关问题(有可能有用的答案):
问题内容: 下面的程序引发NullPointerException。在Log cat中,它显示: 单击该按钮时,它不会进入Mousefragment类。我试图解决它,但是我不能-如何解决这个问题? 编辑 单击该按钮多少次,该异常随同invalid_ip Toast消息一起显示 问题答案: 如前所述,您的问题询问如何解决此问题。 您需要弄清楚在哪里抛出。为此,请查看堆栈跟踪以查看引起问题的行。然后,
问题内容: 我在做一个 用。我有我的输出。有人可以帮我吗?谢谢。 sendMailServlet代码: 在GlassFish 2.1上的输出: 问题答案: 您需要实施一个自定义 现在在 另请查看JavaMail常见问题解答
大部分软件都可以通过付出相对较小的努力,让他们比刚发布时快上10到100倍。在市场的压力下,选择一个简单而快速的解决问题的方法是比选择其它方法更为明智而有效率的选择。然而,性能是可用性的一部分,而且通常它也需要被更仔细地考虑。 提高一个非常复杂的系统的性能的关键是,充分分析它,来发现其“瓶颈”,或者其资源耗费的地方。优化一个只占用1%执行时间的函数是没有多大意义的。一个简要的原则是,你在做任何事情
本文向大家介绍JAVA如何解决并发问题,包括了JAVA如何解决并发问题的使用技巧和注意事项,需要的朋友参考一下 并发问题的根源在哪 首先,我们要知道并发要解决的是什么问题?并发要解决的是单进程情况下硬件资源无法充分利用的问题。而造成这一问题的主要原因是CPU-内存-磁盘三者之间速度差异实在太大。如果将CPU的速度比作火箭的速度,那么内存的速度就像火车,而最惨的磁盘,基本上就相当于人双腿走路。 这样
我正在尝试“CountDiinctSlices”代码性问题。我尽力了,得分30%,所以试图查找这样做的人以获得洞察力。基本上,我在答案中没有得到的是初始化的数组(和)的使用以及它是如何被使用的,得到它的人可以友好地引导我完成这段代码。 这是我没有解释就找到的答案 这是全部问题 给出了一个整数M和一个由N个非负整数组成的非空数组a。数组A中的所有整数都小于或等于M。 一对整数(P,Q),使得0≤ P
目前我有应用程序是在谷歌播放,我有keystore和密码。当我尝试构建我的应用程序使用我工作正常,得到了未签名的apk.但当我尝试签署的应用程序它显示给我一个错误,你能帮我解决这个问题吗? 检测到Android Studio项目 子项目路径:CordovaLib子项目路径:app publishNonDefault已弃用,不再有效。所有变体现在都已发布。项目中的配置“编译”:app已弃用。改用“实