我有一个遗留日志类。它得到了一个静态记录器引用(名为Logger)和一系列静态方法。
每个方法接受一个字符串输入并将其写入系统。出来如果记录器不为null,则println和to记录器。
它有一个初始化记录器的构造函数。但是这个构造函数只有包的作用域,我很确定它不会在任何地方被调用。因此,logger始终为null,并且该类实际上只执行系统。出来普林顿
我想改变这一点,以便它可以在多线程应用程序中使用,其中每个线程都会写入自己唯一的FileAppender。
这就是我被困的地方。
基本上,我想做的是让这个静态类与一堆不同的log4j FileAppender相关联。每个FileAppender都可以由线程创建,文件名可以从线程已知的唯一信息中派生。
我不知道如何神奇地使用Log4j将该线程的唯一FileAppender与这个遗留日志类通信。
思想?提示?建议?
做记号
可以使用RoutingAppender和ThreadContext映射动态更改目标日志文件名。
这一切都可以通过配置完成(在线程创建FileAppender时不需要自定义代码)。在RoutingAppender配置中,可以指定要用于切换目标FileAppender的ThreadContext键。例如,您可以使用字符串“ROUTINGKEY”。每个线程在ThreadContext映射中为键“ROUTINGKEY”放置一个唯一的值,该值用于选择日志事件路由到的附加器。您甚至可以将其设置为动态创建文件名中包含ROUTINGKEY值的日志文件,这样就不需要预先知道所有目标日志文件。
常见问题页面有一个很好的例子:http://logging.apache.org/log4j/2.x/faq.html#separate_log_files
我在运行Windows XP sp3的计算机上安装了Java 6和Java 7。我已在计算机中的环境变量(path、JAVA_HOME)中输入path- java-版本 我还是收到下面的短信 Java版本"1.7.0_09"Java(TM)SE运行时环境(构建1.7.0_09-b05)JavaHotSpot(TM)客户端VM(构建23.5-b02,混合模式,共享) 然而,当我尝试 javac-版本
为了给你一些上下文,解决方案1说: 使用根植于test/目录(即上表中的中间列)的绝对导入。这保证了直接运行始终有效。为了直接运行,请将其作为导入的模块而不是作为脚本运行: 将目录更改为控制台中的 可以更改(取2) 一个更难处理的问题是下面的例子。假设从来不需要直接运行,而是由直接运行的和导入。 在这种情况下,使用上面描述的解决方案1将不起作用。然而,其他解决方案仍然有效。
问题内容: 我正在尝试使用php在mysql中切换两行的ID-我读得越多,我就越困惑。似乎有很多相互矛盾的信息。有没有人得到明确的答案。 例如,在初始状态下,我的行是 然后我想交换第2行和第3行的ID,以便它看起来像这样 因此,如果我随后按ID订购,我将拥有 问题答案: 如果ID是主键,则您不想更改它/可以更改它。 如果这仅用于排序,我建议创建一个“ order”列,该列是整数并对其进行排序。表架
问题内容: 我在有菜单按钮的项目中使用react。 还有一个Sidenav组件,例如: 我编写了以下代码来切换菜单: 事实是,这不是DOM元素,我无法在他上添加类。 有人可以向我解释如何像在按钮上一样在组件上切换类吗? 问题答案: 如果您想让React正确高效地渲染DOM,则必须使用组件的State来更新组件参数,例如Class Name。 更新:我更新了示例,以在单击按钮时切换Sidemenu。
有什么方法可以改变HtmlUnit中带有会话的url吗? 我的案子就像下面这样, null 这在HtmlUnit本身可能吗? 我的示例代码
我正试图获得一个可切换的边栏: 无边栏: 带侧边栏: (以下是一个行为示例:http://pythonhosted.org/cloud_sptheme--请参见侧栏上的按钮。使用其代码库并不容易,因为它不是基于引导的) 我从一个使用Bootstrap 2和jQuery 1.8的工作示例开始:jsfiddle,SO question,并试图使其在Bootstrap 3上工作。下面是一个代码(boot