logback.xml介绍以及高级使用
·
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
<timestamp key="time" datePattern="yyyyMMdd" />
<appender name="STDOUT"」
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d[yyyy/MM/dd HH:mm:ss]] [%thread] [%-22logger [22]] [%-5level] %msg%n</pattern>
</encoder>
</appender>
<appender name="SYSTEM_LOG"
class="ch.gos.logback.core.FileAppender">
<file>/var/log/app/app3.log</file
<encoder>
<charset>UTF-8</charset>
<pattern><![CDATA[syslog: %d{yyyy-MM-dd HH:mm:ss] %m%n]]></pattern>
</encoder>
</appender>
<appender name="ERROR_LOG"
class="ch.gos.logback.core. FileAppender">
<!-- エラーログの出力先はJavaで設定を行う
<file></file>
<encoder>
<charset>UTF-8</charset>
<pattern><![CDATA[%d [yyyy-MM-dd HH:mm:ss] %m%n]]></pattern>
</encoder>
</appender>
<appender name="DEBUG_LOG"
class="ch.gos.logback.core. FileAppender">
<!-- エラーログの出力先はJavaで設定を行う
<file></file>
<encoder>
<charset>UTF-8</charset>
<pattern><![CDATA[%d [yyyy-MM-dd HH:mm:ss] %m%n]]></pattern>
</encoder>
</appender>
Eppender>
<logger
name="jp.co.nttdata.anser. log. IBExceptionLog
additivity="false">
<level value="info" />
<appender-ref ref="ERROR_LOG" />
<appender-ref ref="STDOUT" />
</logger>
<logger>
name="jp.co.nttdata.anser. log. IBEventLog"
additivity="false">
<level value="info" />
<appender-ref ref="SYSTEM_LOG" />
<appender-ref ref="ERROR_LOG" />
<appender-ref ref="STDOUT">
</logger>
<logger>
name="jp.co.nttdata.anser.log.DebugLog"
additivity="false">
<level value="debug" />
<appender-ref ref="SYSTEM_LOG" />
<appender-ref ref="ERROR LOG" />
<appender-ref ref="DEBUG LOG" />
<appender-ref ref="STDOUT" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG_LOG" />
</root>
pattern
| 占位符 | 含义 | 示例 |
|---|---|---|
%thread | 当前线程名 | main、Thread-1 |
%-5level | 日志级别,最少 5 个字符宽度 | INFO 、DEBUG |
%logger{36} | logger 名称,限制最大长度 | com.example.MyClass |
%file | 源文件名 | MyClass.java |
%line | 源文件中的行号 | 123 |
%M | 方法名 | doSomething |
通过以上配置文件会在控制台以及通过file指定的log文件输出以下内容
2025-03-18 12:58:40 xxxxxxxxx
通过程序指定修正输出的log位置
DebugSetting.java:
public static void settingLogPath(String path) {
StringBuilder sb= new StringBuilder():
// ログ出力先のフォルダを指定
if (path.isEmpty()) {
sb.append(DEFAULT_LOG_PATH);
}else{
sb.append(path);
// pathの末尾が”/”でない場合は追加
if (!path.endsWith("/")) [
sb.append("/");
}
}
// 出力ファイル名を指定
String today=LocalDateTime.now().format(DateTimeFormatter.of Pattern ("yyyyMMdd")).toString();
sb.append(String.format(LOG_FILE_NAME, today));
// logback.xmlの内容を上書き
ILoggerFactory iLoggerFactory=LoggerFactory.getILoggerFactory();
if (iLoggerFactory instanceof LoggerContext) {
LoggerContext context=(LoggerContext) LoggerFactory;
Logger logbackLogger =context.getLogger(DebugLog.class);
FileAppender<?> fileAppender eAppender (FileAppender<?>) logbackLogger.getAppender("DEBUG_LOG");
if (fileAppender != null) [
fileAppender.stop();
fileAppender.setFile(sb.toString());
fileAppender.start();
}
}
配置类来修改logback的file节点内容,再通过DebugLog类传输message内容(DebugLog封装logger.debug())。
DebugLog.java:
public class DebugLog [
private static Logger logger = LoggerFactory.getLogger (DebugLog.class);
/**
* デバッグログを出力する
*
* @param msg
*
出力メッセージ
*/
public static void write(String msg) {
LocalDateTime nowTime=LocalDateTime.now();
StackTraceElement[] stackTrace=Thread.current Thread().getStackTrace();
// stackTrace[0]=getStackTrace()メソッド
// stackTrace [1] =writeメソッド
// stackTrace [2] =writeメソッドが呼び出されのメソッド (例: Executeメソッド)-
StackTraceElement sf = stackTrace[2];
StringBuilder outMsg = new StringBuilder();
outMsg.append("[");
outMsg.append(nowTime.format (DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss:SSS")).toString());
out Msg.append("]");
out Msg.append(System.IineSeparator());
outMsg.append("メッセージ:");
out Msg.append(msg);
out Msg.append(System.IineSeparator());
logger.debug(outMsg.toString());
}
使用
首先加载logPath到logback.xml再正常调用DebugLog
DebugLogSetting.settingLogPath('C:/aa/aaaa/aaa");
Debug.write("testMessage");
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)