<?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当前线程名mainThread-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");

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐