标签: logback

Log4j vs Logback:并发写入同一个日志?

我有几个在同一个tomcat上运行的Web应用程序.

我有两个问题:

1-通过搜索,我了解到当存在多个应用程序时,登录同一文件可能会出现一些问题.这是在同一个Web服务器上运行的多个应用程序的情况吗?当使用默认的stdout输出时,这也是正确的吗?

2-在Logback库中有一个谨慎的模式:

在谨慎模式下,即使存在可能在不同主机上运行的不同JVM中运行的其他FileAppender实例,FileAppender也会安全地写入指定文件.prudent模式的默认值为false.

我想知道使用Logback是否仅适用于多个JVM,还是对同一Web服务器上运行的多个应用程序也有利?如果没有,这方面的log4j是否相同?

谢谢

java logging log4j web-applications logback

17
推荐指数
2
解决办法
1万
查看次数

在特定类中关闭其他库的日志记录日志

我成功地使用Spring的@Scheduled注释每几秒执行一次方法.唯一的问题是,由于这种方法,我从Hibernate和Spring获得了很多关于事务等的日志消息.

我想保持日志记录级别相同,因为我喜欢接收应用程序中其他事务的此信息.

在执行特定方法时,是否有一种方法可以暂时禁止另一个库的日志记录?

java logging spring scheduled-tasks logback

17
推荐指数
3
解决办法
1万
查看次数

覆盖WildFly中的日志记录

我使用tomcat并简单地覆盖默认日志系统.如何在我的spring应用程序中使用wildfly上的logback启用日志记录?

我的logback.xml是关于tomcat的

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="WARN" />
    <logger name="com.citronium.planstery" level="INFO" />
    <logger name="org.apache.http.impl.conn.tsccm" level="ERROR" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

jboss log4j logback wildfly

17
推荐指数
2
解决办法
3万
查看次数

如何以编程方式告诉Logback重新加载配置

我知道有一个reloadDefaultConfiguration()jmx操作,但是没有得到MBean的实例并调用此操作,是否有一个Logback api来重新加载默认配置(可选择指定一个日志配置文件路径)?

java logging logback

16
推荐指数
2
解决办法
5167
查看次数

Tomcat WAR - 配置Logback以在路径中使用应用程序名称

我在war文件lib文件夹中部署了logback,并且在classes文件夹中有以下logback.xml.

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <property name="destination" value="${catalina.base:-./temp}/logs/${appName:-myapp}" />

  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${destination}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>${destination}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <!-- Keep logs for 7 days -->
      <maxHistory>7</maxHistory>

      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="error">
    <appender-ref ref="ROLLING" />
  </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在第3行,我有一些变量替换,为我的日志文件创建路径.

  <property name="destination" value="${catalina.base:-./temp}/logs/${appName:-myapp}" />
Run Code Online (Sandbox Code Playgroud)

我想让它如此${appName}评估已部署的war文件的当前名称.

因此,如果我的网络应用文件夹看起来像这样

webapps
 - myapp.war
 - myapp-dev.war
Run Code Online (Sandbox Code Playgroud)

${destination}myapp.war 的属性将评估为.../logs/myapp,myapp-dev.war将评估为.../logs/myapp-dev.是否有JNDI属性或我可以访问appName的东西? …

java tomcat logback slf4j

16
推荐指数
2
解决办法
2万
查看次数

Logback:"无法在类路径上找到Janino库"

我收到错误消息Could not find Janino library on the class path. Skipping conditional processing.我应该在classpath中加入什么来解决这个问题(lib和版本)?

logback janino

16
推荐指数
1
解决办法
9211
查看次数

在maven项目中解析多个SLF4J绑定

这个问题在SE网站上听起来像一堆类似的问题,所以我应该非常详细地提出我的问题.所以,这是项目的最小化pom.xml:

<dependencies>
     <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.6</version>
    </dependency>

   <dependency>
        <groupId>org.codehaus.gmaven.runtime</groupId>
        <artifactId>gmaven-runtime-1.7</artifactId>
        <version>1.3</version>
   </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <mainClass>org.shabunc.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

这是maven生成的依赖树.

mvn dependency:tree -Dverbose -Dincludes=org.slf4j:

[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.6.5:compile
Run Code Online (Sandbox Code Playgroud)

现在,让我们删除排除并再次检查依赖项.我们会得到:

 [INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.6.5:compile
[INFO] \- org.codehaus.gmaven.runtime:gmaven-runtime-1.7:jar:1.3:compile
[INFO]    +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO]    +- org.codehaus.gmaven.feature:gmaven-feature-support:jar:1.3:compile
[INFO]    |  \- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted …
Run Code Online (Sandbox Code Playgroud)

java dependencies logback slf4j maven

16
推荐指数
1
解决办法
3万
查看次数

Logback文件appender不会立即刷新

在某些情况下,我需要立即强制刷新logback的文件appender.我在docs中发现默认情况下启用此选项.神秘地说这不起作用.正如我在源代码中看到的过程涉及BufferedOutputSream正确.有什么问题BufferedOutputSream.flush()吗?可能这与冲洗问题有关.

更新:我在Windows XP Pro SP 3和Red Hat Enterprise Linux Server 5.3版(Tikanga)上发现了这个问题.我使用了这些库:

jcl-over-slf4j-1.6.6.jar
logback-classic-1.0.6.jar
logback-core-1.0.6.jar
slf4j-api-1.6.6.jar
Run Code Online (Sandbox Code Playgroud)

logback.xml方法是:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/somepath/file.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>file.log.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>3</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="FILE"/>
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

更新: 我提供单元测试,但似乎不那么简单.让我更清楚地描述这个问题.

  1. 发生了记录事件
  2. 事件被传递到文件appender
  3. 事件使用定义的模式序列化
  4. 事件的序列化消息被传递给文件appender并且即将写出到输出流
  5. 写入流完成后,输出流被刷新(我已经检查了实现).请注意,immidiateFlush默认情况下为true,因此flush()显式调用方法
  6. 没有结果文件!

稍后当一些底层缓冲区流动时,事件出现在文件中.所以问题是:输出流是否保证立即刷新?

说实话,我已经通过实现我自己的ImmediateRollingFileAppender利用FileDescriptor立即同步的工具来解决这个问题.任何有兴趣的人都可以这样做.

所以这不是一个回归问题.

java io logging flush logback

16
推荐指数
1
解决办法
1万
查看次数

Logback Logging Pattern中的进程ID

我有以下logback模式:

<pattern>
    {"hostname": "${HOSTNAME}", 
     "level": "%p", 
     "method": "%M", 
     "process_id": "${process}", 
     "thread_id": "%t", 
     "timestamp": "%d{Y-M-d}T%d{H:M:S.s}", 
     "mesg":"%msg"}%n
</pattern>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当实际生成日志消息时,我看到: "process_id": "process_IS_UNDEFINED"

是否有任何自动设置的进程ID变量,例如主机名是什么?我在logback文档中找到这种自动设置变量的文档列表时遇到了很多麻烦,有没有人知道更好的文档源?

编辑:我知道映射诊断上下文,但希望内置解决方案不需要这样的设置,就像主机名如何工作.

java logback

16
推荐指数
2
解决办法
7563
查看次数

Spring启动不会加载logback-spring.xml

我有一个示例Spring Boot应用程序,它使用Logback进行日志记录.所以我logback-spring.xml在jar旁边配置日志记录,但是除非我用它指定它,否则它不起作用logging.config,例如:logging.config=logback-spring.xml.

我特地到春季启动忽视的logback-spring.xml它表明,这可能是因为已经有一个spring.xml地方,但把断点org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile)显示,日志文件是空的.

我在这里做错了吗?

java spring logback spring-boot

16
推荐指数
2
解决办法
9377
查看次数