├── LICENSE
├── README.md
├── jul
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── mkyong
│ │ ├── HelloWorld.java
│ │ └── LoadLogPropertiesFile.java
│ └── resources
│ └── logging.properties
├── log4j2
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── mkyong
│ │ ├── HelloWorld.java
│ │ └── HelloWorldError.java
│ └── resources
│ ├── bk
│ ├── log4j2.properties
│ └── log4j2.yml
│ ├── log4j2-async.xml
│ ├── log4j2-email.xml
│ └── log4j2.xml
├── slf4j-logback
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── mkyong
│ │ ├── HelloWorld.java
│ │ └── HelloWorldError.java
│ └── resources
│ ├── logback-email.xml
│ └── logback.xml
└── tinylog
├── README.md
├── pom.xml
└── src
└── main
├── java
└── com
│ └── mkyong
│ ├── HelloWorld.java
│ ├── LogWithArguments.java
│ ├── LogWithException.java
│ ├── RollingFileExample.java
│ └── TagExample.java
└── resources
├── tinylog-rolling.properties
├── tinylog-tag.properties
└── tinylog.properties
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Yong Mook Kim
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # java-logging
2 | About Java logging.
3 |
--------------------------------------------------------------------------------
/jul/README.md:
--------------------------------------------------------------------------------
1 | # Java Logging APIs Tutorial
2 |
3 | `java.util.logging` examples.
4 |
5 | https://mkyong.com/logging/java-logging-apis-tutorial/
--------------------------------------------------------------------------------
/jul/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 | 4.0.0
7 |
8 | com.mkyong
9 | jul
10 | 1.0
11 |
12 |
13 | UTF-8
14 | 11
15 | 11
16 | 11
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | org.apache.maven.plugins
26 | maven-compiler-plugin
27 | 3.8.1
28 |
29 | ${java.version}
30 | ${java.version}
31 |
32 |
33 |
34 |
35 | org.apache.maven.plugins
36 | maven-shade-plugin
37 | 3.2.4
38 |
39 |
40 |
41 | package
42 |
43 | shade
44 |
45 |
46 |
47 |
49 | com.mkyong.HelloWorld
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/jul/src/main/java/com/mkyong/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import java.util.logging.Level;
4 | import java.util.logging.Logger;
5 |
6 | public class HelloWorld {
7 |
8 | private static Logger logger = Logger.getLogger(HelloWorld.class.getName());
9 |
10 | public static void main(String[] args) {
11 |
12 | // set log level to SEVERE, default level info
13 | logger.setLevel(Level.SEVERE);
14 |
15 | // Log a info level msg
16 | logger.info("This is level info logging");
17 |
18 | logger.log(Level.WARNING, "This is level warning logging");
19 |
20 | logger.log(Level.SEVERE, "This is level severe logging");
21 |
22 | System.out.println("Hello Java Logging APIs.");
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/jul/src/main/java/com/mkyong/LoadLogPropertiesFile.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import java.io.IOException;
4 | import java.io.InputStream;
5 | import java.util.logging.Level;
6 | import java.util.logging.LogManager;
7 | import java.util.logging.Logger;
8 |
9 | // java server.jar -Djava.util.logging.config.file=/path/logging.properties
10 | public class LoadLogPropertiesFile {
11 |
12 | static {
13 | // must set before the Logger
14 | String path = LoadLogPropertiesFile.class.getClassLoader().getResource("logging.properties").getFile();
15 | System.setProperty("java.util.logging.config.file", path);
16 |
17 | /*try (InputStream is = LoadLogPropertiesFile.class.getClassLoader().
18 | getResourceAsStream("logging.properties")) {
19 | LogManager.getLogManager().readConfiguration(is);
20 | } catch (IOException e) {
21 | e.printStackTrace();
22 | }*/
23 |
24 | }
25 |
26 | private static Logger logger = Logger.getLogger(LoadLogPropertiesFile.class.getName());
27 |
28 | public static void main(String[] args) {
29 |
30 | // Log a info level msg
31 | logger.info("This is level info logging");
32 |
33 | logger.log(Level.SEVERE, "This is level severe logging");
34 |
35 | logger.log(Level.WARNING, "This is level warning logging");
36 |
37 | System.out.println("Hello Java Logging APIs.");
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/jul/src/main/resources/logging.properties:
--------------------------------------------------------------------------------
1 | # Logs to file and console
2 | # handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
3 |
4 | # Logs to console only
5 | handlers= java.util.logging.ConsoleHandler
6 |
7 | # Global logging levels, 7 levels
8 | .level= SEVERE
9 |
10 | # Log file output in user's home directory, %h
11 | java.util.logging.FileHandler.pattern = %h/java%u.log
12 | java.util.logging.FileHandler.limit = 50000
13 | java.util.logging.FileHandler.count = 1
14 | java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
15 | # java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
16 |
17 | java.util.logging.ConsoleHandler.level = INFO
18 | java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
19 |
20 | java.util.logging.SimpleFormatter.format=[%1$tc] %4$s: %5$s %n
21 |
22 | # log level for package, this override global .level and handler level
23 | com.mkyong.level = WARNING
--------------------------------------------------------------------------------
/log4j2/README.md:
--------------------------------------------------------------------------------
1 | # Apache Log4j 2 Tutorial
2 |
3 | Article link : https://www.mkyong.com/logging/apache-log4j-2-tutorials/
--------------------------------------------------------------------------------
/log4j2/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 | 4.0.0
7 |
8 | com.mkyong
9 | log4j2
10 | 1.0
11 |
12 |
13 | UTF-8
14 | 1.8
15 | 2.11.2
16 | 3.4.2
17 | 2.9.8
18 |
19 |
20 |
21 |
22 |
23 | org.apache.logging.log4j
24 | log4j-api
25 | ${log4j.version}
26 |
27 |
28 |
29 | org.apache.logging.log4j
30 | log4j-core
31 | ${log4j.version}
32 |
33 |
34 |
35 |
36 | com.lmax
37 | disruptor
38 | ${disruptor.version}
39 |
40 |
41 |
48 |
49 |
50 |
51 | com.sun.mail
52 | javax.mail
53 | 1.6.2
54 |
55 |
56 |
57 |
58 |
59 | com.fasterxml.jackson.dataformat
60 | jackson-dataformat-yaml
61 | ${jackson.version}
62 |
63 |
64 |
65 | com.fasterxml.jackson.core
66 | jackson-databind
67 | ${jackson.version}
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | org.apache.maven.plugins
76 | maven-compiler-plugin
77 | 3.8.0
78 |
79 | ${java.version}
80 | ${java.version}
81 |
82 |
83 |
84 |
85 | org.apache.maven.plugins
86 | maven-shade-plugin
87 | 3.2.0
88 |
89 |
90 |
91 | package
92 |
93 | shade
94 |
95 |
96 |
97 |
99 | com.mkyong.HelloWorld
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/log4j2/src/main/java/com/mkyong/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | public class HelloWorld {
7 |
8 | private static final Logger logger = LogManager.getLogger(HelloWorld.class);
9 |
10 | public static void main(String[] args) {
11 |
12 | logger.debug("Hello from Log4j 2");
13 |
14 | // in old days, we need to check the log level log to increase performance
15 | /*if (logger.isDebugEnabled()) {
16 | logger.debug("{}", getNumber());
17 | }*/
18 |
19 | // with Java 8, we can do this, no need to check the log level
20 | while (true)//test rolling file
21 | logger.debug("hello {}", () -> getNumber());
22 |
23 | }
24 |
25 | static int getNumber() {
26 | return 5;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/log4j2/src/main/java/com/mkyong/HelloWorldError.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | public class HelloWorldError {
7 |
8 | private static final Logger logger = LogManager.getLogger(HelloWorldError.class);
9 |
10 | public static void main(String[] args) {
11 |
12 | try {
13 | System.out.println(getData());
14 | } catch (IllegalArgumentException e) {
15 | logger.error("{}", e);
16 | }
17 |
18 | }
19 |
20 | static int getData() throws IllegalArgumentException {
21 | throw new IllegalArgumentException("Sorry IllegalArgumentException!");
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/log4j2/src/main/resources/bk/log4j2.properties:
--------------------------------------------------------------------------------
1 | status = warn
2 |
3 | appender.console.type = Console
4 | appender.console.name = LogToConsole
5 | appender.console.layout.type = PatternLayout
6 | appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
7 |
8 | #appender.file.type = File
9 | #appender.file.name = LogToFile
10 | #appender.file.fileName=logs/app.log
11 | #appender.file.layout.type=PatternLayout
12 | #appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
13 |
14 | # Rotate log file
15 | appender.rolling.type = RollingFile
16 | appender.rolling.name = LogToRollingFile
17 | appender.rolling.fileName = logs/app.log
18 | appender.rolling.filePattern = logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz
19 | appender.rolling.layout.type = PatternLayout
20 | appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
21 | appender.rolling.policies.type = Policies
22 | appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
23 | appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
24 | appender.rolling.policies.size.size=10MB
25 | appender.rolling.strategy.type = DefaultRolloverStrategy
26 | appender.rolling.strategy.max = 10
27 |
28 | # Log to console and rolling file
29 | logger.app.name = com.mkyong
30 | logger.app.level = debug
31 | logger.app.additivity = false
32 | logger.app.appenderRef.rolling.ref = LogToRollingFile
33 | logger.app.appenderRef.console.ref = LogToConsole
34 |
35 | rootLogger.level = info
36 | rootLogger.appenderRef.stdout.ref = LogToConsole
--------------------------------------------------------------------------------
/log4j2/src/main/resources/bk/log4j2.yml:
--------------------------------------------------------------------------------
1 | Configuration:
2 | status: warn
3 |
4 | appenders:
5 | Console:
6 | name: LogToConsole
7 | PatternLayout:
8 | Pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
9 |
10 | #File:
11 | # name: File
12 | # fileName: logs/app.log
13 | # PatternLayout:
14 | # Pattern: "%d %p %C{1.} [%t] %m%n"
15 |
16 | RollingFile:
17 | - name: LogToRollingFile
18 | fileName: logs/app.log
19 | filePattern: "logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"
20 | PatternLayout:
21 | pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
22 | Policies:
23 | SizeBasedTriggeringPolicy:
24 | size: 10MB
25 | DefaultRollOverStrategy:
26 | max: 10
27 |
28 | Loggers:
29 | logger:
30 | - name: com.mkyong
31 | level: debug
32 | additivity: false
33 | AppenderRef:
34 | - ref: LogToConsole
35 | - ref: LogToRollingFile
36 |
37 | Root:
38 | level: error
39 | AppenderRef:
40 | ref: LogToConsole
--------------------------------------------------------------------------------
/log4j2/src/main/resources/log4j2-async.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 | %d %p %c{1.} [%t] %m%n
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/log4j2/src/main/resources/log4j2-email.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/log4j2/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
21 |
22 |
24 |
25 | %d %p %c{1.} [%t] %m%n
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/slf4j-logback/README.md:
--------------------------------------------------------------------------------
1 | # SLF4J Logback Tutorial
2 |
3 | Article link : https://www.mkyong.com/logging/slf4j-logback-tutorial/
4 |
5 |
--------------------------------------------------------------------------------
/slf4j-logback/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 | 4.0.0
7 |
8 | com.mkyong
9 | slf4j-logback
10 | 1.0
11 |
12 |
13 | UTF-8
14 | 1.8
15 | 1.2.3
16 | 1.6.2
17 |
18 |
19 |
20 |
21 |
22 |
23 | ch.qos.logback
24 | logback-classic
25 | ${logback.version}
26 |
27 |
28 |
29 |
30 | com.sun.mail
31 | javax.mail
32 | ${javax.mail.version}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | org.apache.maven.plugins
41 | maven-compiler-plugin
42 | 3.8.0
43 |
44 | ${java.version}
45 | ${java.version}
46 |
47 |
48 |
49 |
50 |
51 | org.apache.maven.plugins
52 | maven-shade-plugin
53 | 3.2.0
54 |
55 |
56 |
57 | package
58 |
59 | shade
60 |
61 |
62 |
63 |
65 | com.mkyong.HelloWorld
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/slf4j-logback/src/main/java/com/mkyong/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 |
6 | public class HelloWorld {
7 |
8 | private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
9 |
10 | public static void main(String[] args) {
11 |
12 | logger.debug("Hello from Logback");
13 |
14 | //while (true)//test rotate file
15 | logger.debug("getNumber() : {}", getNumber());
16 |
17 | }
18 |
19 | static int getNumber() {
20 | return 5;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/slf4j-logback/src/main/java/com/mkyong/HelloWorldError.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 |
6 | public class HelloWorldError {
7 |
8 | private static final Logger logger = LoggerFactory.getLogger(HelloWorldError.class);
9 |
10 | public static void main(String[] args) {
11 |
12 | try {
13 | System.out.println(getData());
14 | } catch (IllegalArgumentException e) {
15 | logger.error("{}", e);
16 | }
17 |
18 | }
19 |
20 | static int getData() throws IllegalArgumentException {
21 | throw new IllegalArgumentException("Sorry IllegalArgumentException!");
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/slf4j-logback/src/main/resources/logback-email.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
8 |
9 |
10 |
11 |
12 |
13 | smtp.mailgun.org
14 | 25
15 | 123
16 | 123
17 | TO_EMAIL
18 | RO_ANOTHER_EMAIL
19 | FROM_EMAIL
20 | TESTING: %logger{20} - %m
21 |
22 |
23 |
24 |
25 |
26 | 1
27 |
28 |
29 |
30 |
31 | false
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/slf4j-logback/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
10 |
11 |
12 |
13 |
14 |
15 | ${HOME_LOG}
16 |
17 |
18 | logs/archived/app.%d{yyyy-MM-dd}.%i.log
19 |
20 | 10MB
21 |
22 | 20GB
23 |
24 | 60
25 |
26 |
27 |
28 | %d %p %c{1.} [%t] %m%n
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | 512
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/tinylog/README.md:
--------------------------------------------------------------------------------
1 | # tinylog Tutorial
2 |
3 | tinylog 2 examples
4 |
5 | https://mkyong.com/logging/tinylog-tutorial/
--------------------------------------------------------------------------------
/tinylog/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 | 4.0.0
7 |
8 | com.mkyong
9 | tinylog
10 | 1.0
11 |
12 |
13 | UTF-8
14 | 11
15 | 11
16 | 11
17 | 2.3.2
18 |
19 |
20 |
21 |
22 | org.tinylog
23 | tinylog-api
24 | ${tinylog.version}
25 |
26 |
27 |
28 | org.tinylog
29 | tinylog-impl
30 | ${tinylog.version}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | org.apache.maven.plugins
39 | maven-compiler-plugin
40 | 3.8.1
41 |
42 | ${java.version}
43 | ${java.version}
44 |
45 |
46 |
47 |
48 | org.apache.maven.plugins
49 | maven-shade-plugin
50 | 3.2.4
51 |
52 |
53 |
54 | package
55 |
56 | shade
57 |
58 |
59 |
60 |
62 | com.mkyong.HelloWorld
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/tinylog/src/main/java/com/mkyong/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.tinylog.Logger;
4 |
5 | public class HelloWorld {
6 |
7 | // no need declare Logger, tinylog provide static Logger
8 | //private static Logger logger = Logger.getLogger(HelloWorld.class.getName());
9 |
10 | public static void main(String[] args) {
11 |
12 | Logger.info("Hello World TinyLog!");
13 |
14 | Logger.trace("This is trace!");
15 |
16 | Logger.debug("This is debug!");
17 |
18 | Logger.info("This is info!");
19 |
20 | Logger.warn("This is warn!");
21 |
22 | Logger.error("This is error!");
23 |
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/tinylog/src/main/java/com/mkyong/LogWithArguments.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.tinylog.Logger;
4 |
5 | public class LogWithArguments {
6 |
7 | public static void main(String[] args) {
8 |
9 | String msg = "info";
10 | int number = 9;
11 |
12 | Logger.info("This is {}, {}", msg, number);
13 |
14 | Logger.error("This is {}", "error");
15 |
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/tinylog/src/main/java/com/mkyong/LogWithException.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.tinylog.Logger;
4 |
5 | public class LogWithException {
6 |
7 | public static void main(String[] args) {
8 |
9 | try {
10 | int answer = 1 / 0;
11 | System.out.println(answer);
12 | } catch (Exception ex) {
13 | Logger.error(ex);
14 | }
15 |
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/tinylog/src/main/java/com/mkyong/RollingFileExample.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.tinylog.Logger;
4 |
5 | public class RollingFileExample {
6 |
7 | public static void main(String[] args) {
8 |
9 | // create hello x 3 per line
10 | String line = "Hello tinylog! ";
11 | line = line + line + line;
12 |
13 | System.out.println(line);
14 |
15 | int count = 0;
16 | while (count < 100_000) {
17 | Logger.info(line + count);
18 | count++;
19 | }
20 |
21 | System.out.println("Done");
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/tinylog/src/main/java/com/mkyong/TagExample.java:
--------------------------------------------------------------------------------
1 | package com.mkyong;
2 |
3 | import org.tinylog.Logger;
4 |
5 | public class TagExample {
6 |
7 | public static void main(String[] args) {
8 |
9 | Logger.info("normal");
10 |
11 | // send to writer tagged `system`
12 | Logger.tag("system").error("this is system!");
13 |
14 | // send to writer tagged `api`
15 | Logger.tag("api").info("This is normal api log!");
16 |
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/tinylog/src/main/resources/tinylog-rolling.properties:
--------------------------------------------------------------------------------
1 | # rolling file
2 | writer = rolling file
3 | writer.level = info
4 | writer.format = {date: HH:mm:ss.SSS} {level}: {message}
5 | # writer.file = {date:yyyy}/{date:MM}/log-{pid}.{count}.log
6 | writer.file = logs/{date:yyyy-MM-dd}-log.{count}.log
7 | writer.latest = logs/latest.log
8 | writer.charset = UTF-8
9 | writer.buffered = true
10 | writer.policies = startup, daily: 00:00, size: 1mb
11 | writer.backups = 100
12 | writer.convert = gzip
13 |
14 | # writing thread or async logger, better performance
15 | writingthread = true
--------------------------------------------------------------------------------
/tinylog/src/main/resources/tinylog-tag.properties:
--------------------------------------------------------------------------------
1 | # logs to Console
2 | writer = console
3 | writer.format = {date: HH:mm:ss.SSS} {level}: {message}
4 | writer.level = info
5 |
6 | # logs to a file, tag `api`
7 | writer2 = file
8 | writer2.tag = api
9 | writer2.file = logs/api.log
10 | writer2.format={date: yyyy-MM-dd HH:mm:ss.SSS} {level}: {message}
11 | writer2.level = info
12 |
13 | # logs to a file, tag `system`
14 | writer3 = file
15 | writer3.tag = system
16 | writer3.file = logs/system.log
17 | writer3.format={date: yyyy-MM-dd HH:mm:ss.SSS} {level}: {message}
--------------------------------------------------------------------------------
/tinylog/src/main/resources/tinylog.properties:
--------------------------------------------------------------------------------
1 | # logs to Console
2 | #writer = console
3 | #writer.format = {date: HH:mm:ss.SSS} {level}: {message}
4 | #writer.level = info
5 |
6 | # logs to a file
7 | #writer2 = file
8 | #writer2.file = log.txt
9 | #writer2.level = info
10 |
11 | # logs to Console
12 | # writerConsole = console
13 | # writerConsole.format = {date: HH:mm:ss.SSS} {level}: {message}
14 | # writerConsole.level = info
15 |
16 | # logs to a file
17 | # writerFile = file
18 | # writerFile.file = log.txt
19 | # writerFile.level = info
--------------------------------------------------------------------------------