我想在我的应用程序中将slf4j + logback用于两个目的-日志和审计。
对于日志记录,我以常规方式记录日志:
static final Logger logger = LoggerFactory.getLogger(Main.class);
logger.debug("-> main()");
对于审计,我创建一个特殊的命名记录器并登录到它:
static final Logger logger = LoggerFactory.getLogger("AUDIT_LOGGER");
Object[] params =
{ new Integer(1) /* TenantID */, new Integer(10) /* UserID */, msg};
logger.info("{}|{}|{}", params);
登录配置:
<logger name="AUDIT_LOGGER" level="info">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS}|%msg%n
</pattern>
</encoder>
</appender>
</logger>
<root level="all">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
</root>
问题:通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下。
14:41:57.975 [main]调试com.gammay.example.Main–> main()
14:41:57.978 | 1 | 10 |欢迎来到主要网站
14:41:57.978 [main] INFO AUDIT_LOGGER-1 | 10 |欢迎来到main
如何确保审核消息在审核记录器下仅出现一次?
更改审核记录器定义,如下所示。additivity="false"
记录器定义中的Note 标志。
<logger name="AUDIT_LOGGER" level="info" additivity="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS}|%msg%n
</pattern>
</encoder>
</appender>
</logger>
这样可以避免再次在root logger中记录该日志。阅读logback配置文档以获取更多信息。
我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?
附加器 和3个记录器: 记录器1 null
我还希望com.mypack的级别“trace”与“info”的行为方式相同。到目前为止,我还没有取得任何成功。我需要像这样的东西 感谢你的帮助。
我使用的是JBoss,因此需要排除JBoss自己的日志子系统,以便进行日志记录,我使用的是jboss-deployment-structure.xml文件: 我使用的是JPA,因此如果这可能有所帮助,这是我的persistence.xml文件:
假设我有一个输入文件,在HDFS中为这个文件创建了三个块。假设我有三个数据节点,每个数据节点存储一个块。如果我有3个输入拆分,则3个映射器将并行运行,以处理各自数据节点的本地数据。每个映射器使用输入格式和记录读取器以键值对的形式获取输入。此场景使用TextInputFormat,其中记录是来自文件的完整文本行。 这里的问题是,如果在第一个块的末尾有记录中断,会发生什么。 1)Hadoop如何读取此