{"id":432,"date":"2025-11-29T02:38:57","date_gmt":"2025-11-29T02:38:57","guid":{"rendered":"https:\/\/iotnoob.com\/wordpress\/?p=432"},"modified":"2025-11-29T02:38:57","modified_gmt":"2025-11-29T02:38:57","slug":"%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-log-file-%e0%b9%83%e0%b8%99-java-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-slf4j-simple-logging-facade-for-java","status":"publish","type":"post","link":"https:\/\/iotnoob.com\/wordpress\/2025\/11\/29\/%e0%b8%aa%e0%b8%a3%e0%b9%89%e0%b8%b2%e0%b8%87-log-file-%e0%b9%83%e0%b8%99-java-%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-slf4j-simple-logging-facade-for-java\/","title":{"rendered":"\u0e2a\u0e23\u0e49\u0e32\u0e07 Log file \u0e43\u0e19 Java \u0e14\u0e49\u0e27\u0e22 SLF4J (Simple Logging Facade for Java)"},"content":{"rendered":"\n<p>\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e08\u0e32\u0e01 Gemini<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e41\u0e19\u0e30\u0e19\u0e33: SLF4J + Logback\/Log4j 2<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>SLF4J (Simple Logging Facade for Java)<\/strong><\/h3>\n\n\n\n<p>SLF4J \u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48 logging framework \u0e42\u0e14\u0e22\u0e15\u0e23\u0e07 \u0e41\u0e15\u0e48\u0e40\u0e1b\u0e47\u0e19 <strong>facade<\/strong> \u0e2b\u0e23\u0e37\u0e2d <strong>abstraction layer<\/strong> (\u0e0a\u0e31\u0e49\u0e19\u0e19\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21) \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e14\u0e49\u0e32\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e02\u0e2d\u0e07 logging framework \u0e08\u0e23\u0e34\u0e07 \u0e46<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e04\u0e27\u0e32\u0e21\u0e2b\u0e25\u0e32\u0e01\u0e2b\u0e25\u0e32\u0e22 (Versatility):<\/strong> \u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 logging framework \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e40\u0e1a\u0e37\u0e49\u0e2d\u0e07\u0e2b\u0e25\u0e31\u0e07\u0e44\u0e14\u0e49\u0e07\u0e48\u0e32\u0e22 \u0e46 \u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e41\u0e01\u0e49\u0e44\u0e02\u0e42\u0e04\u0e49\u0e14\u0e17\u0e35\u0e48\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49 <code>logger.info(...)<\/code> \u0e43\u0e19\u0e41\u0e2d\u0e1b\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13<\/li>\n\n\n\n<li><strong>Setup:<\/strong> \u0e07\u0e48\u0e32\u0e22\u0e21\u0e32\u0e01 \u0e40\u0e1e\u0e35\u0e22\u0e07\u0e41\u0e04\u0e48\u0e40\u0e1e\u0e34\u0e48\u0e21 dependency \u0e02\u0e2d\u0e07 SLF4J API \u0e41\u0e25\u0e30\u0e15\u0e31\u0e27\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d (binding) \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a framework \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e40\u0e25\u0e37\u0e2d\u0e01<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Logback (The Successor to log4j)<\/strong><\/h3>\n\n\n\n<p>Logback \u0e16\u0e39\u0e01\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e21\u0e32\u0e43\u0e2b\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e1c\u0e39\u0e49\u0e2a\u0e37\u0e1a\u0e17\u0e2d\u0e14\u0e02\u0e2d\u0e07 Log4j 1.x \u0e41\u0e25\u0e30\u0e16\u0e39\u0e01\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e42\u0e14\u0e22\u0e1c\u0e39\u0e49\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e04\u0e19\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e14\u0e48\u0e19:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27 (Speed):<\/strong> \u0e40\u0e23\u0e47\u0e27\u0e01\u0e27\u0e48\u0e32 Log4j 1.x \u0e41\u0e25\u0e30\u0e04\u0e48\u0e2d\u0e19\u0e02\u0e49\u0e32\u0e07\u0e40\u0e23\u0e47\u0e27\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e17\u0e35\u0e22\u0e1a\u0e01\u0e31\u0e1a Log4j 2.x<\/li>\n\n\n\n<li><strong>\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33 (Memory):<\/strong> \u0e43\u0e0a\u0e49\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33\u0e19\u0e49\u0e2d\u0e22\u0e01\u0e27\u0e48\u0e32<\/li>\n\n\n\n<li><strong>Setup \u0e07\u0e48\u0e32\u0e22:<\/strong> <strong>Setup \u0e07\u0e48\u0e32\u0e22\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14<\/strong> \u0e43\u0e19\u0e1a\u0e23\u0e23\u0e14\u0e32\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e41\u0e19\u0e30\u0e19\u0e33 \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e16\u0e39\u0e01\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e21\u0e32\u0e43\u0e2b\u0e49\u0e17\u0e33\u0e07\u0e32\u0e19\u0e23\u0e48\u0e27\u0e21\u0e01\u0e31\u0e1a SLF4J \u0e42\u0e14\u0e22\u0e15\u0e23\u0e07 (\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49 adapter \u0e1e\u0e34\u0e40\u0e28\u0e29)<\/li>\n\n\n\n<li><strong>Reloading:<\/strong> \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e42\u0e2b\u0e25\u0e14 configuration \u0e43\u0e2b\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e44\u0e1f\u0e25\u0e4c config \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0e04\u0e27\u0e32\u0e21\u0e19\u0e34\u0e22\u0e21:<\/strong> \u0e40\u0e1b\u0e47\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e17\u0e35\u0e48\u0e22\u0e2d\u0e14\u0e40\u0e22\u0e35\u0e48\u0e22\u0e21\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c\u0e43\u0e2b\u0e21\u0e48 \u0e46<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Log4j 2<\/strong><\/h3>\n\n\n\n<p>Log4j 2 \u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 (re-write) \u0e02\u0e2d\u0e07 Log4j 1.x \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2a\u0e16\u0e32\u0e1b\u0e31\u0e15\u0e22\u0e01\u0e23\u0e23\u0e21\u0e17\u0e35\u0e48\u0e41\u0e15\u0e01\u0e15\u0e48\u0e32\u0e07\u0e08\u0e32\u0e01 Logback<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e14\u0e48\u0e19:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e (Performance):<\/strong> \u0e21\u0e35\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e2a\u0e39\u0e07\u0e21\u0e32\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e41\u0e1a\u0e1a <strong>Asynchronous<\/strong> (non-blocking logging) \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e21\u0e32\u0e01\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e2d\u0e1b\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e19\u0e17\u0e35\u0e48\u0e21\u0e35\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13 log \u0e2a\u0e39\u0e07 \u0e46<\/li>\n\n\n\n<li><strong>\u0e04\u0e27\u0e32\u0e21\u0e22\u0e37\u0e14\u0e2b\u0e22\u0e38\u0e48\u0e19 (Flexibility):<\/strong> \u0e21\u0e35\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07\u0e21\u0e32\u0e01\u0e21\u0e32\u0e22 \u0e40\u0e0a\u0e48\u0e19 Filters, Custom Layouts \u0e41\u0e25\u0e30 Appenders \u0e17\u0e35\u0e48\u0e2b\u0e25\u0e32\u0e01\u0e2b\u0e25\u0e32\u0e22\u0e01\u0e27\u0e48\u0e32<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Setup:<\/strong> \u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e0b\u0e31\u0e1a\u0e0b\u0e49\u0e2d\u0e19\u0e01\u0e27\u0e48\u0e32 Logback \u0e40\u0e25\u0e47\u0e01\u0e19\u0e49\u0e2d\u0e22 \u0e41\u0e15\u0e48\u0e01\u0e47\u0e22\u0e31\u0e07\u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e07\u0e48\u0e32\u0e22\u0e41\u0e25\u0e30\u0e21\u0e35\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e17\u0e35\u0e48\u0e14\u0e35<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    \/\/ SLF4J API (The Facade)\n    implementation 'org.slf4j:slf4j-api:2.0.12' \n    \n    \/\/ Logback (The Implementation - \u0e23\u0e27\u0e21\u0e16\u0e36\u0e07 Binding)\n    implementation 'ch.qos.logback:logback-classic:1.4.14' \n\n    \/\/ \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a Project \u0e40\u0e01\u0e48\u0e32\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49 Log4j 1.x (\u0e16\u0e49\u0e32\u0e21\u0e35) \u0e40\u0e1e\u0e37\u0e48\u0e2d Bridge \u0e44\u0e1b SLF4J\n    \/\/ implementation 'org.slf4j:log4j-over-slf4j:2.0.12'<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"458\" height=\"330\" src=\"https:\/\/iotnoob.com\/wordpress\/wp-content\/uploads\/2025\/11\/image-5.png\" alt=\"\" class=\"wp-image-433\" srcset=\"https:\/\/iotnoob.com\/wordpress\/wp-content\/uploads\/2025\/11\/image-5.png 458w, https:\/\/iotnoob.com\/wordpress\/wp-content\/uploads\/2025\/11\/image-5-300x216.png 300w\" sizes=\"auto, (max-width: 458px) 100vw, 458px\" \/><\/figure>\n\n\n\n<p>\u0e17\u0e14\u0e25\u0e2d\u0e07 \u0e2d\u0e22\u0e48\u0e32\u0e07\u0e07\u0e48\u0e32\u0e22<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package com.example.LogTestingApp;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class App {\n    \/\/ \u0e43\u0e0a\u0e49 LoggerFactory \u0e08\u0e32\u0e01 SLF4J\n    private static final Logger logger = LoggerFactory.getLogger(App.class);\n\n    public static void main(String[] args) {\n        System.out.println(\"App Test\");\n        logger.info(\"Application starting...\"); \/\/ \u0e42\u0e04\u0e49\u0e14\u0e17\u0e35\u0e48\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\n        try {\n            \/\/ ... some logic\n        } catch (Exception e) {\n            logger.error(\"An error occurred: {}\", e.getMessage(), e); \/\/ \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a Placeholder {} \u0e41\u0e25\u0e30\u0e2a\u0e48\u0e07 Exception \u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e2b\u0e49\u0e0a\u0e37\u0e48\u0e2d Log file \u0e40\u0e01\u0e47\u0e1a\u0e41\u0e22\u0e01\u0e15\u0e32\u0e21\u0e0a\u0e37\u0e48\u0e2d user \u0e41\u0e25\u0e30\u0e41\u0e22\u0e01\u0e2b\u0e49\u0e2d\u0e07\u0e02\u0e2d\u0e07\u0e43\u0e04\u0e23\u0e02\u0e2d\u0e07\u0e21\u0e31\u0e19\u0e44\u0e14\u0e49<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;configuration>\n\n    &lt;property name=\"LOG_PATTERN\" \n              value=\"%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\" \/>\n\n    &lt;appender name=\"SIFTING_LOG\" class=\"ch.qos.logback.classic.sift.SiftingAppender\">\n\n        &lt;discriminator>\n            &lt;key>username&lt;\/key>\n            &lt;defaultValue>system&lt;\/defaultValue> &lt;\/discriminator>\n\n        &lt;sift>\n            &lt;appender name=\"FILE-${username}\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">\n                \n                &lt;file>logs\/${username}\/${username}.log&lt;\/file> \n\n                &lt;rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">\n                    &lt;fileNamePattern>logs\/${username}\/archive\/${username}-%d{yyyy-MM-dd}.log&lt;\/fileNamePattern>\n                    &lt;maxHistory>30&lt;\/maxHistory>\n                &lt;\/rollingPolicy>\n\n                &lt;encoder>\n                    &lt;pattern>${LOG_PATTERN}&lt;\/pattern>\n                &lt;\/encoder>\n\n            &lt;\/appender>\n        &lt;\/sift>\n    &lt;\/appender>\n\n    &lt;root level=\"info\">\n        &lt;appender-ref ref=\"SIFTING_LOG\" \/>\n        &lt;\/root>\n\n&lt;\/configuration>\n<\/pre>\n\n\n\n<p>\u0e17\u0e14\u0e25\u0e2d\u0e07\u0e2d\u0e35\u0e01\u0e15\u0e31\u0e27 \u0e42\u0e14\u0e22\u0e01\u0e32\u0e23\u0e41\u0e17\u0e23\u0e01\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e2d\u0e07 user \u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n * Click nbfs:\/\/nbhost\/SystemFileSystem\/Templates\/Licenses\/license-default.txt to change this license\n * Click nbfs:\/\/nbhost\/SystemFileSystem\/Templates\/Classes\/Class.java to edit this template\n *\/\npackage com.example.LogTestingApp;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.slf4j.MDC;\n\n\/**\n *\n * @author sowas\n *\/\npublic class LogManager {\n    private static final Logger logger = LoggerFactory.getLogger(LogManager.class);\n\n    public void userAction(String userId) {\n        \n        \/\/ --- 1. \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32 MDC 'username' \u0e01\u0e48\u0e2d\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33 Logging ---\n        \/\/ \u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e08\u0e30\u0e16\u0e39\u0e01 SiftingAppender \u0e19\u0e33\u0e44\u0e1b\u0e43\u0e0a\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e0a\u0e37\u0e48\u0e2d\u0e44\u0e1f\u0e25\u0e4c\n        MDC.put(\"username\", userId); \n        \n        try {\n            \/\/ Log \u0e17\u0e35\u0e48\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19\u0e43\u0e19 block \u0e19\u0e35\u0e49\u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e02\u0e35\u0e22\u0e19\u0e25\u0e07\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c logs\/[userId]\/[userId].log\n            logger.info(\"User {} started a new session.\", userId);\n            \n            \/\/ ... \u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e32\u0e21 Business Logic ...\n            \n            logger.info(\"User {} performed a critical operation.\", userId);\n\n        } catch (Exception e) {\n            logger.error(\"Error for user {}: {}\", userId, e.getMessage(), e);\n        } finally {\n            \/\/ --- 2. \u0e25\u0e49\u0e32\u0e07\u0e04\u0e48\u0e32 MDC \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e08\u0e1a\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19 ---\n            \/\/ \u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e21\u0e32\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49 Log \u0e02\u0e2d\u0e07 User \u0e04\u0e19\u0e19\u0e35\u0e49\u0e44\u0e1b\u0e1b\u0e19\u0e01\u0e31\u0e1a Log \u0e02\u0e2d\u0e07 User \u0e04\u0e19\u0e2d\u0e37\u0e48\u0e19\n            \/\/ \u0e17\u0e35\u0e48\u0e2d\u0e32\u0e08\u0e43\u0e0a\u0e49 Thread \u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19\u0e43\u0e19\u0e04\u0e23\u0e31\u0e49\u0e07\u0e15\u0e48\u0e2d\u0e44\u0e1b (\u0e42\u0e14\u0e22\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e43\u0e19 Web Application)\n            MDC.remove(\"username\"); \n        }\n    }\n    \n    public static void main(String[] args) {\n        LogManager manager = new LogManager();\n        System.out.println(\"Test\");\n        \n        \/\/ Log \u0e02\u0e2d\u0e07 UserA \u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e02\u0e35\u0e22\u0e19\u0e25\u0e07\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c logs\/UserA\/UserA.log\n        manager.userAction(\"UserA\"); \n        \n        \/\/ Log \u0e02\u0e2d\u0e07 Admin1 \u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e02\u0e35\u0e22\u0e19\u0e25\u0e07\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c logs\/Admin1\/Admin1.log\n        manager.userAction(\"Admin1\"); \n        \n        \/\/ Log \u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e21\u0e35\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 MDC \u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e02\u0e35\u0e22\u0e19\u0e25\u0e07\u0e43\u0e19 logs\/system\/system.log (\u0e15\u0e32\u0e21 defaultValue)\n        logger.info(\"A general system log event.\");\n    }\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udca1 \u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e19\u0e4c\u0e2b\u0e25\u0e31\u0e01\u0e02\u0e2d\u0e07 MDC \u0e43\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33 Logging<\/h2>\n\n\n\n<p>MDC \u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 <strong>Context Holder<\/strong> \u0e2b\u0e23\u0e37\u0e2d\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e40\u0e01\u0e47\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e1c\u0e39\u0e01\u0e15\u0e34\u0e14\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e31\u0e1a <strong>Thread \u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19<\/strong> \u0e42\u0e14\u0e22\u0e17\u0e35\u0e48\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e43\u0e19\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e19\u0e35\u0e49\u0e08\u0e30\u0e16\u0e39\u0e01\u0e19\u0e33\u0e44\u0e1b\u0e43\u0e0a\u0e49\u0e42\u0e14\u0e22 <strong>Logging Framework<\/strong> \u0e42\u0e14\u0e22\u0e40\u0e09\u0e1e\u0e32\u0e30<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u0e01\u0e32\u0e23\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e44\u0e1f\u0e25\u0e4c Log \u0e41\u0e1a\u0e1a Dynamic (Dynamic File Naming)<\/h3>\n\n\n\n<p>\u0e19\u0e35\u0e48\u0e04\u0e37\u0e2d\u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e19\u0e4c\u0e2b\u0e25\u0e31\u0e01\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e40\u0e2b\u0e47\u0e19\u0e43\u0e19\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07 Logback:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e42\u0e04\u0e49\u0e14 Java:<\/strong> \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e04\u0e38\u0e13\u0e40\u0e23\u0e35\u0e22\u0e01 <code>MDC.put(\"username\", \"UserA\")<\/code> \u0e04\u0e48\u0e32 <code>\"UserA\"<\/code> \u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e01\u0e47\u0e1a\u0e44\u0e27\u0e49\u0e43\u0e19 Thread \u0e17\u0e35\u0e48\u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19<\/li>\n\n\n\n<li><strong>Logback Configuration:<\/strong> <code>SiftingAppender<\/code> \u0e43\u0e19 <code>logback.xml<\/code> \u0e16\u0e39\u0e01\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e2b\u0e49\u0e14\u0e36\u0e07\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01 MDC Key \u0e17\u0e35\u0e48\u0e0a\u0e37\u0e48\u0e2d\u0e27\u0e48\u0e32 <code>username<\/code> \u0e21\u0e32\u0e43\u0e0a\u0e49<\/li>\n\n\n\n<li><strong>\u0e1c\u0e25\u0e25\u0e31\u0e1e\u0e18\u0e4c:<\/strong> Logback \u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32 <code>\"UserA\"<\/code> \u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e40\u0e01\u0e47\u0e1a\u0e44\u0e27\u0e49\u0e43\u0e19 MDC \u0e19\u0e31\u0e49\u0e19 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e23\u0e49\u0e32\u0e07 <strong>\u0e0a\u0e37\u0e48\u0e2d\u0e44\u0e14\u0e40\u0e23\u0e01\u0e17\u0e2d\u0e23\u0e35<\/strong> \u0e41\u0e25\u0e30 <strong>\u0e0a\u0e37\u0e48\u0e2d\u0e44\u0e1f\u0e25\u0e4c<\/strong> \u0e40\u0e0a\u0e48\u0e19 <code>logs\/UserA\/UserA.log<\/code> \u0e41\u0e25\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19 Log \u0e17\u0e35\u0e48\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19\u0e43\u0e19 Thread \u0e19\u0e31\u0e49\u0e19\u0e25\u0e07\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c\u0e19\u0e31\u0e49\u0e19\u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 Context \u0e43\u0e19\u0e17\u0e38\u0e01\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14 Log (Context Enrichment)<\/h3>\n\n\n\n<p>\u0e41\u0e21\u0e49\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e08\u0e30\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e43\u0e19\u0e42\u0e04\u0e49\u0e14 Java \u0e41\u0e15\u0e48\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e19\u0e31\u0e49\u0e19\u0e25\u0e07\u0e43\u0e19\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a (Pattern) \u0e02\u0e2d\u0e07 Log \u0e44\u0e14\u0e49:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Log Pattern:<\/strong> \u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 Pattern \u0e43\u0e19 <code>logback.xml<\/code> \u0e43\u0e2b\u0e49\u0e21\u0e35 <code>**%X{username}**<\/code> \u0e17\u0e38\u0e01\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14 Log \u0e17\u0e35\u0e48\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19\u0e43\u0e19 Thread \u0e19\u0e31\u0e49\u0e19\u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e15\u0e34\u0e21\u0e14\u0e49\u0e27\u0e22\u0e04\u0e48\u0e32 <code>username<\/code> \u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07 Pattern:XML<\/li>\n\n\n\n<li><code>&lt;pattern>%d [%thread] **%X{username}** %-5level - %msg%n&lt;\/pattern><\/code><\/li>\n\n\n\n<li><strong>\u0e1c\u0e25\u0e25\u0e31\u0e1e\u0e18\u0e4c\u0e43\u0e19 Log File:<\/strong><\/li>\n\n\n\n<li><code>2025-11-29 09:17:19 [http-nio-8080] **UserA** INFO - UserA started a new session. 2025-11-29 09:17:20 [http-nio-8080] **UserA** INFO - UserA performed a critical operation. <\/code>\u0e2a\u0e34\u0e48\u0e07\u0e19\u0e35\u0e49\u0e21\u0e35\u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e19\u0e4c\u0e21\u0e32\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e32\u0e21\u0e18\u0e38\u0e23\u0e01\u0e23\u0e23\u0e21 (Transaction Tracking) \u0e2b\u0e23\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e44\u0e25\u0e48\u0e2b\u0e32\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e02\u0e2d\u0e07\u0e41\u0e15\u0e48\u0e25\u0e30\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e23\u0e30\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e21\u0e35\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e2b\u0e25\u0e32\u0e22\u0e04\u0e19 (Multi-user System)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u0e01\u0e32\u0e23\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a Multi-threading (Thread Safety)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0e43\u0e19 Web Application \u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b <strong>Thread<\/strong> \u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19\u0e2d\u0e32\u0e08\u0e16\u0e39\u0e01\u0e19\u0e33\u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e43\u0e0a\u0e49\u0e43\u0e2b\u0e21\u0e48\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23 <strong>User \u0e04\u0e19\u0e2d\u0e37\u0e48\u0e19<\/strong> \u0e43\u0e19\u0e20\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07<\/li>\n\n\n\n<li>MDC \u0e43\u0e0a\u0e49\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e17\u0e35\u0e48\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e30\u0e01\u0e31\u0e19\u0e27\u0e48\u0e32\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13 <code>put()<\/code> \u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b \u0e08\u0e30\u0e16\u0e39\u0e01\u0e1c\u0e39\u0e01\u0e15\u0e34\u0e14\u0e01\u0e31\u0e1a Thread \u0e19\u0e31\u0e49\u0e19 \u0e46 \u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 \u0e41\u0e25\u0e30\u0e08\u0e30 <strong>\u0e44\u0e21\u0e48\u0e23\u0e31\u0e48\u0e27\u0e44\u0e2b\u0e25<\/strong> \u0e44\u0e1b\u0e22\u0e31\u0e07 Thread \u0e2d\u0e37\u0e48\u0e19<\/li>\n\n\n\n<li>\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49 <code>MDC.remove(\"username\")<\/code> \u0e43\u0e19 Block <code>finally<\/code> (\u0e15\u0e32\u0e21\u0e17\u0e35\u0e48\u0e41\u0e19\u0e30\u0e19\u0e33) \u0e08\u0e36\u0e07\u0e40\u0e1b\u0e47\u0e19 <strong>\u0e2a\u0e34\u0e48\u0e07\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e21\u0e32\u0e01<\/strong> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e25\u0e49\u0e32\u0e07\u0e04\u0e48\u0e32\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e08\u0e1a\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 UserA \u0e17\u0e33\u0e43\u0e2b\u0e49 Thread \u0e19\u0e31\u0e49\u0e19\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a UserB \u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e01\u0e48\u0e32\u0e15\u0e34\u0e14\u0e04\u0e49\u0e32\u0e07\u0e2d\u0e22\u0e39\u0e48<\/li>\n<\/ul>\n\n\n\n<p>\u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19 \u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e19\u0e4c\u0e02\u0e2d\u0e07 MDC \u0e08\u0e36\u0e07\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e43\u0e19\u0e42\u0e04\u0e49\u0e14 Java \u0e42\u0e14\u0e22\u0e15\u0e23\u0e07 \u0e41\u0e15\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e1a\u0e01\u0e32\u0e23 <strong>\u0e08\u0e31\u0e14\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22\u0e1a<\/strong> \u0e41\u0e25\u0e30 <strong>\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1a\u0e23\u0e34\u0e1a\u0e17 (Context)<\/strong> \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a Log File \u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e04\u0e23\u0e31\u0e1a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e08\u0e32\u0e01 Gemini \u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e41\u0e19\u0e30\u0e19\u0e33: SLF4J + Logback\/Log4j 2 1. SLF4J (Simple Logging Facade for Java) SLF4J&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-432","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/comments?post=432"}],"version-history":[{"count":1,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/432\/revisions"}],"predecessor-version":[{"id":434,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/432\/revisions\/434"}],"wp:attachment":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/media?parent=432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/categories?post=432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/tags?post=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}